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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM