解决 Mac 上 Docker 无法直接 ping 通的问题

时间:2022-11-18 03:13:00

解决 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 和子网掩码。

解决 Mac 上 Docker 无法直接 ping 通的问题

我本地 自己创建的网络段是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

解决 Mac 上 Docker 无法直接 ping 通的问题

此时,打开 Finder 文件视窗,前往 /docker-mac-network/ 文件夹,发现多出一个 docker-for-mac.vpn 文件,如下图

解决 Mac 上 Docker 无法直接 ping 通的问题

4.1.3 编辑 docker-for-mac.vpn

  • 编辑 docker-for-mac.vpn 文件(该步骤必须完成)

打开 docker-for-mac.vpn 文件,找到下图红框位置,添加 comp-lzo yes,保存文件。

解决 Mac 上 Docker 无法直接 ping 通的问题

4.3 启动Tunnelblick,为其添加配置

解决 Mac 上 Docker 无法直接 ping 通的问题

将docker-for-mac.vpn文件作为Tunnelblick的配置文件。

4.3.1 连接

点击右上角最左侧 Tunnelblick 图标 >> VPN 详情 ...,点击右下角连接。

解决 Mac 上 Docker 无法直接 ping 通的问题

解决 Mac 上 Docker 无法直接 ping 通的问题

五、测试验证

测试 ping docker 容器的IP。

到此结束。