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> 命令,能够查看到容器的网络配置