我刚刚迁移到使用Docker for Mac,之前使用Docker Toolbox和Virtualbox for OSX。
我曾经用$(docker-machine ip default)
获取机器的IP地址。
是否有可靠的方法来获取Hyperkit IP地址?
谢谢!
答案 0 :(得分:22)
与 Docker工具箱相反,适用于Windows的Docker 和适用于Mac的Docker 旨在让您感觉 Docker < / strong>直接在您的操作系统上运行,因此他们使用在 docker 可执行文件直接处理的轻量级虚拟机管理程序(而不是 VirtualBox )下运行的轻量级虚拟机。 因此,您无法通过 docker-machine 看到它们,并且您不会看到除 localhost 之外的其他IP地址。
适用于Windows的Docker 依赖于 HyperV 虚拟机管理程序,该虚拟机管理程序允许网络连接到tcp://localhost:2375
。
适用于Mac的Docker 依赖于 xhyve 虚拟机管理程序,其实现方式仅通过套接字unix:///var/run/docker.sock
提供连接。
为 Docker for Mac 提供TCP连接:
安装 socat 。使用 brew :
brew install socat
运行此 socat 命令将TCP请求转发到套接字
socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock
在tcp://localhost:2375
如果需要,最多可以在启动时运行 socat 命令。
这对我来说非常有用,可以将 Webstorm nodeJS调试器与 nodeJS 容器相关联(因为在撰写本文时, docker debugging Webstorm docker集成插件支持,但不支持unix套接字。)
https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
macOS上没有docker0桥接
由于在Docker for Mac中实现网络的方式,您无法在macOS中看到docker0接口。这个界面实际上在HyperKit中。
答案 1 :(得分:9)
没有必要像使用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
处可用。
答案 2 :(得分:7)
您可以将docker图像用于socat,每次启动时都会启动它#docker for mac&#39;
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
找到您的docker API IP地址:
ifconfig | grep 'inet 192'| awk '{ print $2}'
答案 3 :(得分:1)
我目前的解决方案是使用Docker Machine(一个可在另一个IP地址下使用的Linux VM)创建容器,并将容器的所有流量路由到docker machine VM。
sudo route -n add -net 172.18.0.0/16 192.168.99.100
您可以使用docker inspect
获取docker容器的网络范围,并使用docker-machine ip
答案 4 :(得分:0)
另一种解决方法是使用sudo ifconfig lo0 alias 172.17.0.1
,因此您仍可以使用相同的静态IP地址(如果基于Linux的同事或bash脚本坚持使用该IP地址)。