MAC DOCKER无法ping通容器解决方案

时间:2022-10-26 08:05:21

原因

先来看下LINUX的docker架构
MAC DOCKER无法ping通容器解决方案
docker是在linux内核容器基础上实现的,linux安装docker后,会创建一个为docker0的虚拟网卡,linux宿机与docker容器之间的通信,通过docker0虚拟网卡进行

再来看下OSX的docker
MAC DOCKER无法ping通容器解决方案
docker在OSX的实现方式,是首先创建一个linux的虚拟机,在将docker放入到虚拟机中实现,而对于linux虚拟机,与OSX之间的通信,目前版本采用/var/run/docker.sock这种socket文件来通信,在OSX宿机中自然ping不通docker容器。

解决方案

首先,如果想要解决这种问题,就要打通OSX与LINUX VM的通信通道。步骤如下:

  1. 抛弃docker for mac自带的linux虚拟机(尽管轻量,但其与OSX通信采用socket文件的方式),使用docker-machine
  2. 安装virtualbox。virtualbox创建后,会添加一个虚拟网卡,可以通过ifconfig命令查看。我们实现的方式,就是利用这个虚拟网卡。
  3. 使用docker-machine创建默认linux虚拟机,命令docker-machine create
  4. 切换docker环境,使用eval $(docker-machine env)命令
  5. 查看创建的虚拟机的ip地址:docker-machine ip default或者直接docker-machine ip,假如为192.168.99.100
  6. 执行route命令,把192.168.99.100作为网关,将docker容器的ip段,路由到此IP上。假如docker容器的网段为172.17.0.0/16,那么使用sudo route -n add -net 172.17.0.0/16 192.168.99.100命令,添加路由信息。
  7. 启动一个docker容器,此次测试使用redis:alpine镜像:docker run -d redis:alpine。查看运行的镜像IP。并ping测试。如无意外,宿机目前可以ping同容器了。

OVER