踩坑记:解决 Mac 上 Docker 无法直接 ping 通的问题

 2019-12-21 

环境

MacOS 10.12.6 & Docker

问题

在 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。

  • 安装 Tunnelblick 客户端
1
brew cask install tunnelblick

也可手动安装

  • 克隆 docker-mac-network 项目
1
git clone https://github.com/wojas/docker-mac-network.git

image.png

  • 找到 docker-mac-network/helpers/ 文件夹
1
find ~ -iname docker-mac-network

  • 修改 run.sh 文件
    打开 Finder 文件视窗,前往 /docker-mac-network/helpers/ 文件夹,使用 sublime 打开 run.sh 文件。
    找到下图红框位置,将 ip 和 子网掩码 修改为 docker 的 ip 和子网页码。

    image.png

  • 执行 docker-compose up
    打开 terminal 终端,cd 进入 /docker-mac-network(注意,不是helpers/ 文件夹),启动 docker-compose up。

注意:此时,可能会有 [16058] Failed to execute script docker-compose 报错,请移步我的另一篇文章:https://www.jianshu.com/p/3dd305a4cb23。

1
docker-compose up

运行一段时间后,得到下图:

image.png

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

image.png

  • 编辑 docker-for-mac.vpn 文件(该步骤必须完成)
    使用 sublime 打开 docker-for-mac.vpn 文件,找到下图红框位置,
    添加 comp-lzo yes,保存文件。

    image.png

  • 启动 docker-for-mac.vpn
    双击启动 docker-for-mac.vpn ,系统提示 Tunnelblick 成功地 安装了一个配置。
    点击右上角最左侧 Tunnelblick 图标 >> VPN 详情 ...,点击右下角连接。


    image.png

    查看 terminal 终端,得到下图,表示启动成功。


    image.png

  • 测试 ping docker ip
    新启动一个 terminal 终端,ping 一下 docker ip 得到下图,表示 ping 得通。


    image.png

联系博主:下为博主微信,欢迎骚扰

image.png