架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 323|回复: 0

docker container 容器访问外部宿主机服务

[复制链接]
发表于 2019-11-19 10:10:01
zu
docker 容器的默认网络是采用桥接的形式(和主机在同一个局域网中,但是单独使用一个独立的局域网IP),程序在生产环境中运行时,连接数据库、redis等只需要配置对应的服务地址就可以了。

在开发环境中,如果服务在docker中运行,数据库在本机运行,配置数据库连接的时候配置 127.0.0.1 就不好使了。

可以用两种方式解决这个问题。

解决方案一:

将宿主机和容器看着是独立的两台机器,在配置地址的时候配置宿主机的局域网ip或是公网ip。

解决方案二:

将宿主机地址直接写成: host.docker.internal,不过第二种方式需要docker 版本 大于 18.03,且要在windows和mac下才能用

要测试这两个方式能不能访问宿主机,可以直接用docker运行一个镜像在命令行进行ping测试:

在Docker构建的容器中安装ping工具
https://www.itsvse.com/thread-8966-1-1.html
(出处: 架构师_程序员)
docker外网.png

从上面图中可知,容器访问 host.docker.internal 即可访问宿主机的服务,通过查看 /etc/hosts 文件,发现并没有域名重定向,具体docker底层原理就不知道了,通过telnet 1433端口,也就是mssql数据库,可以连接成功。

宿主机和容器,其实都可以通过 host.docker.internal 访问宿主机的服务,但是,通过 ping 命令返回的地址都不相同,如下:

docker ip.jpg







上一篇:实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
下一篇:Autofac "Circular component dependency detected" 错误解决
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-1-18 11:11

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表