Docker与宿主机通信
问题
服务部署于docker容器中,而MongoDB部署在宿主机,在docker容器中访问mongodb://localhost:27017
会返回TimedOut
。
分析
容器与宿主机之间的连接有bridge
和host
,默认是bridge
,也可以是none
。
当连接模式为bridge
时,docker通过docker0
虚拟网桥与宿主机连接。
bridge 对宿主机来讲相当于一个单独的网卡设备 对于运行在宿主机上的每个容器来说相当于一个交换机,所有容器的虚拟网线的一端都连接到
docker0
上。
通常,面对这种情况可以创建自定义网络来解决。但是,如非复杂的需求,创建自定义网络并非最优解。
另一种连接方式host
则会与宿主机共用网络。换而言之,容器可以任意访问宿主机本地换回端口,宿主机也可以任意访问容器开放的端口。当然,带来的弊端是容器开放的端口不能与宿主机冲突。
只要将连接方式改为host
,便可以实现容器与宿主机MongoDB的连接。
解决
docker: 命令加入
--net=host
参数;docker-compose: 在
docker-compose.yaml
中加入network_mode: host
。
参考
评论
评论插件加载失败
正在加载评论插件