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

相關文章
相關標籤/搜索