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

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

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

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

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

 

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

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

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

 

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

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

二、docker for mac 的容器里能够经过 docker.for.mac.host.internal 域名直接访问宿主机服务容器

三、docker inspect <container_id> 命令,能够查看到容器的网络配置

相关文章
相关标签/搜索