問題描述
最近周一上班時,突然連不上公司內網,想到周末搗鼓過docker,判斷很有可能是安裝了docker引起的。我的系統是 ubuntu18.04, docker的版本如下:
通過 sudo ifconfig發現多了一個docker0的網卡,使用sudo ifconfig docker0 down 暫時關閉docker0的虛擬網卡后,果然又能訪問內網了。但這個docker0為什么會影響我連公司網呢?
查閱了docker的官方文檔及SO上的問答,我找到了原因。
當 Docker server 啟動時,會在主機上創建一個名為 docker0 的虛擬網橋,如上圖所示,通過宿主機上veth*的虛擬網卡和容器eth0網卡相連,由此實現容器和外部的網絡通信。容器的ip和mac由宿主機生成,而默認docker0 默認的容器ip為172.17.0.1/16 ,問題就在這里。我們公司的DNS地址巧好也在 172.17.*.*這個網段,而被誤認為是容器內部ip,從而通過docker0嘗試訪問容器,自然是訪問不到的。
解決方案的話就是要區別容器ip和DNS地址,可以通過在 /etc/docker/daemon.json中添加如下配置
{
"bip": "172.31.0.1/16"
}
然后重啟就ok了!