解决 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。
到此结束。