Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案

Posted 猫哥_kaiye | 编程笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案相关的知识,希望对你有一定的参考价值。

docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯。

最近更新 Docker for mac 之后,发现以前容器中可以访问的局域网内服务(使用宿主机所在的局域网 IP 访问),变得不可访问了。一开始以为是新版本改了默认网络配置,查了半天 release log 并没有找到相关条目。

后来在同事的帮助下发现问题所在:

由于换了新的工位,宿主机的局域网 IP 网段由 172.16.*.* 切换到了 172.17.*.* ,刚好和 docker 虚拟网桥 IP 段 172.17.*.* 冲突。

 

解决问题的办法也很简单:

1、如果是  Docker for mac,打开 Preferences -> Daemon -> Advanced ,修改(或增加)配置 {"bip" : "172.16.10.1/24"} ,从而避免网段冲突的问题;

2、Linux 版本的 docker 配置,请参看这里:《Docker 修改默认的网段

 

另外在问题解决的过程当中,发现了一些知识点:

1、docker-compose 的网络配置字段为 network_mode: "host" 而非 net: "host"

2、docker for mac 的容器里可以通过 docker.for.mac.host.internal 域名直接访问宿主机服务

3、docker inspect <container_id> 命令,可以查看到容器的网络配置

 

以上是关于Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose创建的网段与内网冲突时的解决方法

docker与宿主通信突然断了

Docker:Docker实现同Ip网段联通

Docker:Docker实现同Ip网段联通

【docker swarm】docker swarm 中的网段冲突问题

Docker:Docker实现同Ip网段联通