Docker for Mac VM IP

我刚刚迁移到使用Docker for Mac,以前使用Docker Toolbox和VirtualBox for OSX。

我用$(docker-machine ip default)获取机器的IP地址。

有一个可靠的方式来获取HyperKet的IP地址?

谢谢!

不需要像使用docker docker-machine一样直接使用xhyve VM的IP地址。 所有端口映射都直接映射到localhost

 $ docker run -d -p 8080:80 nginx:latest $ curl localhost:8080 

另请参阅官方文档 :

当你使用-p参数运行一个容器时,例如: $ docker run -p 80:80 -d nginx Docker for Mac将使容器端口在localhost可用。

Docker工具箱相反, Docker for MacDocker for Mac旨在让您感觉Docker直接在您的操作系统上运行,因此它们使用在轻量级虚拟机pipe理程序(而不是VirtualBox )下运行的轻量级虚拟机,由docker可执行文件直接处理。
因此,你不会看到他们与docker机 ,你不会看到另一个IP地址比本地主机

Docker for Windows依赖于允许networking连接到tcp://localhost:2375HyperVpipe理程序。

Docker for Mac依赖于xhyvepipe理程序,它的实现方式只能通过套接字unix:///var/run/docker.sock提供连接。

解决方法

Docker for Mac提供TCP连接:

  1. 安装socat酿造

    brew install socat

  2. 运行此socat命令将TCP请求转发到套接字

    socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock

  3. 映射你想要的tcp://localhost:2375

如果需要的话,启动时运行socat命令。

这对我来说很有用,可以将Webstorm nodeJSdebugging器nodeJS容器相关联(因为在编写本书时Webstorm docker集成插件支持docker debugging ,但不支持unix套接字)。

Docker for Mac限制的文档

https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds

macOS上没有docker0网桥

由于在Docker for Mac中实现联网的方式,在macOS中看不到docker0接口。 这个接口实际上是在HyperKit中。

你可以使用docker image for socat,每次启动“docker for mac”

docker run -d –restart = always -p 2376:2375 -v /var/run/docker.sock:/var/run/docker.sock bobrik / socat TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/ var / run中/ docker.sock

find你的dockerAPI的IP地址:

 ifconfig | grep 'inet 192'| awk '{ print $2}' 

我目前的解决scheme是使用Docker Machine(在另一个IP地址下可用的linux VM)创build容器,并将容器的所有stream量路由到docker计算机VM。

 sudo route -n add -net 172.18.0.0/16 192.168.99.100 

您可以使用docker-machine ip inspection获取您的docker容器的networking范围,并使用docker-machine ip来获得您的docker machine VM的IP地址