Docker Mac 虚拟机 IP
Docker for Mac VM IP
我刚刚从之前使用带有 virtualbox 的 Docker Toolbox 和 OSX 的 Docker 迁移到 Mac。
我以前用$(docker-machine ip default)
获取机器IP地址。
是否有可靠的方法获取 Hyperkit IP 地址?
谢谢!
不需要像使用 docker-machine
那样直接使用 xhyve VM 的 IP 地址。所有端口映射直接映射到localhost
.
$ docker run -d -p 8080:80 nginx:latest
$ curl localhost:8080
When you run a container with the -p
argument, for example: $ docker run -p 80:80 -d nginx
Docker for Mac will make the container port available at localhost
.
反对Docker工具箱,Docker为Windows和Docker for Mac 旨在让您感觉 Docker 直接在 运行ning你的OS,所以他们在轻量级管理程序下使用轻量级虚拟机运行ning(而不是VirtualBox)直接由[=102=处理]可执行。
因此,您不会看到它们带有 docker-machine,并且您不会看到除 localhost 之外的其他 IP 地址。
Docker for Windows 依赖于 HyperV hypervisor,它允许网络连接到 tcp://localhost:2375
.
Docker for Mac 依赖于 xhyve 管理程序,它的实现方式仅提供连接通过套接字 unix:///var/run/docker.sock
.
解决方法
为 Docker 为 Mac 提供 TCP 连接:
安装socat。用 brew:
brew install socat
运行这个socat命令转发TCP请求到socket
socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock
在 tcp://localhost:2375
上映射您想要的内容
如有必要,由您决定 运行 在启动时使用 socat 命令。
例如,这对我将 Webstorm nodeJS 调试器 关联到 nodeJS 容器很有用(因为在撰写本文时, docker 调试 由 Webstorm docker 集成插件 支持,但不通过 unix 套接字)。
关于 Docker 的 Mac 限制的文档
https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
There is no docker0 bridge on macOS
Because of the way networking is implemented in Docker for Mac, you cannot see a docker0 interface in macOS. This interface is actually within HyperKit.
您可以为 socat 使用 docker 图像,它会在您每次启动时启动 '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
查找您的 docker API IP 地址:
ifconfig | grep 'inet 192'| awk '{ print }'
我目前的解决方案是使用 Docker 机器(在另一个 IP 地址下可用的 linux 虚拟机)创建容器,并将容器的所有流量路由到 docker 机器虚拟机。
sudo route -n add -net 172.18.0.0/16 192.168.99.100
您可以使用 docker inspect
获取 docker 容器的网络范围,使用 docker-machine ip
获取 docker 机器虚拟机的 IP 地址
另一种解决方法是使用 sudo ifconfig lo0 alias 172.17.0.1
,这样您仍然可以使用相同的静态 IP 地址(如果您的 Linux 同事或 bash 脚本坚持使用该地址)。
我刚刚从之前使用带有 virtualbox 的 Docker Toolbox 和 OSX 的 Docker 迁移到 Mac。
我以前用$(docker-machine ip default)
获取机器IP地址。
是否有可靠的方法获取 Hyperkit IP 地址?
谢谢!
不需要像使用 docker-machine
那样直接使用 xhyve VM 的 IP 地址。所有端口映射直接映射到localhost
.
$ docker run -d -p 8080:80 nginx:latest
$ curl localhost:8080
When you run a container with the
-p
argument, for example:$ docker run -p 80:80 -d nginx
Docker for Mac will make the container port available atlocalhost
.
反对Docker工具箱,Docker为Windows和Docker for Mac 旨在让您感觉 Docker 直接在 运行ning你的OS,所以他们在轻量级管理程序下使用轻量级虚拟机运行ning(而不是VirtualBox)直接由[=102=处理]可执行。
因此,您不会看到它们带有 docker-machine,并且您不会看到除 localhost 之外的其他 IP 地址。
Docker for Windows 依赖于 HyperV hypervisor,它允许网络连接到 tcp://localhost:2375
.
Docker for Mac 依赖于 xhyve 管理程序,它的实现方式仅提供连接通过套接字 unix:///var/run/docker.sock
.
解决方法
为 Docker 为 Mac 提供 TCP 连接:
安装socat。用 brew:
brew install socat
运行这个socat命令转发TCP请求到socket
socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock
在
tcp://localhost:2375
上映射您想要的内容
如有必要,由您决定 运行 在启动时使用 socat 命令。
例如,这对我将 Webstorm nodeJS 调试器 关联到 nodeJS 容器很有用(因为在撰写本文时, docker 调试 由 Webstorm docker 集成插件 支持,但不通过 unix 套接字)。
关于 Docker 的 Mac 限制的文档
https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
There is no docker0 bridge on macOS
Because of the way networking is implemented in Docker for Mac, you cannot see a docker0 interface in macOS. This interface is actually within HyperKit.
您可以为 socat 使用 docker 图像,它会在您每次启动时启动 '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
查找您的 docker API IP 地址:
ifconfig | grep 'inet 192'| awk '{ print }'
我目前的解决方案是使用 Docker 机器(在另一个 IP 地址下可用的 linux 虚拟机)创建容器,并将容器的所有流量路由到 docker 机器虚拟机。
sudo route -n add -net 172.18.0.0/16 192.168.99.100
您可以使用 docker inspect
获取 docker 容器的网络范围,使用 docker-machine ip
另一种解决方法是使用 sudo ifconfig lo0 alias 172.17.0.1
,这样您仍然可以使用相同的静态 IP 地址(如果您的 Linux 同事或 bash 脚本坚持使用该地址)。