解決 Mac 上 Docker 無法直接 ping 通的問題
一、背景
Mac os Mojave 10.14.3
Docker Desktop community 2.3.0.4
二、問題
在 Mac 上啟動 docker 容器以后,宿主機 ping 不通容器的ip。
三、原因
在宿主機上看不到 docker0,無法訪問容器所在的網絡,導致宿主機 ping 不通 Docker 給 Container 所分配的 IP 地址。
詳情參見官網:https://docs.docker.com/docker-for-mac/networking/#there-is-no-docker0-bridge-on-macos
如看完官網還是不懂,牆裂推薦這篇文章:https://windmt.com/2019/08/30/docker-for-mac-network/
四、解決
解決問題的方案,是 github 上的 docker-for-mac(https://github.com/wojas/docker-mac-network) 項目,主要方法是使用 OpenVpn 來訪問 docker。
4.1安裝 Tunnelblick 客戶端
brew cask install tunnelblick
也可以手動安裝,這里建議手動安裝 brew在國內太慢了。
tunnelblick的地址 https://github.com/Tunnelblick/Tunnelblick/releases
4.2 克隆 docker-mac-network 項目
git clone https://github.com/wojas/docker-mac-network.git
4.2.1 修改 run.sh 文件
- 打開 Finder 文件視窗,前往 /docker-mac-network/helpers/ 文件夾,打開 run.sh 文件。找到下圖紅框位置,將 ip 和 子網掩碼 修改為 docker 的 ip 和子網掩碼。
我本地 自己創建的網絡段是172.19。
4.1.2 執行 docker-compose up
- 在 /docker-mac-network 目錄下執行
docker-compose up
命令
注意:此時,可能會有 [16058] Failed to execute script docker-compose 報錯,請移步我的另一篇文章:https://www.jianshu.com/p/3dd305a4cb23。
此時,打開 Finder 文件視窗,前往 /docker-mac-network/ 文件夾,發現多出一個 docker-for-mac.vpn 文件,如下圖
4.1.3 編輯 docker-for-mac.vpn
- 編輯 docker-for-mac.vpn 文件(該步驟必須完成)
打開 docker-for-mac.vpn 文件,找到下圖紅框位置,添加 comp-lzo yes,保存文件。
4.3 啟動Tunnelblick,為其添加配置
將docker-for-mac.vpn文件作為Tunnelblick的配置文件。
4.3.1 連接
點擊右上角最左側 Tunnelblick 圖標 >> VPN 詳情 ...,點擊右下角連接。
五、測試驗證
測試 ping docker 容器的IP。
到此結束。