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> 命令,能夠查看到容器的網絡配置