這兩天遇到一個奇怪的問題:開開心心連上服務器,準備跑上本身的服務。爲了方便部署,固然是先安裝 Docker 了。開開心心的安裝,寫 Dockerfile,寫完了跑起來!訪問,懵逼了,沒法訪問,直接 ping 不通了。由於是忽然發現這個問題,沒有太懷疑 Docker 的問題,只是把 Docker 關了後發現依舊不行,就排除 Docker 了。docker
出問題後能夠 ssh 登錄服務器,可是服務器 ping 不通,也不能訪問。shell
賊心不死,再申請了個服務器,此次學聰明瞭,先 ping 一下,發現能夠 ping 通,而後裝上 Docker 再 ping 一下,涼了!問題定位,就是 Docker 的鍋!那怎麼辦呢?json
肯定是 Docker 的鍋就好辦了,一番 Google,發現了有類似的問題。bash
一句話解釋:原來是 Docker 和宿主機的網段衝突了,改了網段就行了。服務器
Docker 容器網絡默認使用的是 bridge 橋接模式,通常容器會使用 daemon.json
中定義的虛擬網橋來與宿主機進行通訊。markdown
下面分別是 Linux 和 Mac 修改 Docker 默認網段的方法。網絡
sudo service docker stop
sudo ip link set dev docker0 down
sudo brctl delbr docker0
sudo iptables -t nat -F POSTROUTING
複製代碼
sudo brctl addbr docker0
sudo ip addr add 172.17.10.1/24 dev docker0
sudo ip link set dev docker0 up
複製代碼
vi /etc/docker/daemon.json -bash-4.2$ cat /etc/docker/daemon.json { "bip":"172.17.10.1/24" } # 注意就是將 bip 的值改爲新設置的網段 複製代碼
打開 Preferences -> Advanced,修改 Docker subnet 配置 172.17.10.1/24
,從而避免網段衝突的問題。ssh