我有以下设置:
- 运行 MySQL 的 OSX 在端口 3306 上监听所有网络适配器
- XDEBUG 启用了 IDE 在基本 OSX 系统上的端口 9000 上监听。
- 在 OSX 系统上运行的 docker-machine 主机,主机 ip 为 192.168.99.100
- 一个基于 debian 的 docker 容器,在 docker 主机上运行一个 mysql 客户端,并运行带有 xdebug 的 HHVM,希望连接到端口 9000 上的某个幸运的远程主机。
由于通过 DHCP 分配,OSX 系统上的 IP 地址经常更改,所以我希望 docker 容器能够以某种方式访问 mysql 服务器,而不管 native OSX 网络适配器分配的 IP 是什么(没有手动更新它)。另外,我需要一个稳定的 ip,我可以为我的 HHVM server.ini 文件提供一个远程主机供 Xdebug 使用。
在运行 linux 的基本系统时,这不是问题,因为 docker 主机和运行 docker 的实际 native 机器是一回事。此外,容器有多种方法可以了解主机的 ip,因此问题不会出现在 docker 主机上。
但是,在运行 docker-machine 的 OSX 中,主机不是 native OSX 系统,而是在虚拟机中运行的 VM(假设您使用的是 vb 驱动程序,而 sam hill 不是?)。
我唯一能想到的是将 3306 上的请求转发到 docker-machine 主机(192.168.99.100,永远不会改变)到 OSX 的端口 3306。然后让容器访问 docker-machine 主机以获取 Mysql 请求.如果这可行,我可以冲洗并重复我需要链接的任何端口,例如端口 9000 上的 xdebug。
有谁知道如何做到这一点或有其他建议?
最佳答案
无需进行任何更改即可提供一致的 IP 以连接到基本 OSX 系统,找到了一种解决方法。 Docker 机器以这样的方式进行设置,以使这成为可能。
- Docker 机器创建一个带有 2 个网络适配器的虚拟机虚拟机,一个设置为仅主机,另一个设置为 NAT。不知道为什么它会创建 2,但是
- 仅主机适配器为 OSX 提供 192.168.99.1 的 IP,并且使用它的各种 VM 获取以 192.168.99.100 开头的地址。但是,在虚拟机网络内部,您不能使用地址 192.168.99.1 访问父 OSX 系统上的端口(不知道为什么,但猜测主机只是为了虚拟机之间的通信)。
- 已设置 NAT 网络适配器,因此 OSX 获取 ip 10.0.2.2,VM 获取 10.0.2.15。使用 NAT,您可以从 docker 主机 VM 和主机上运行的容器路由到 10.0.2.2 的 OSX 系统。
由于 OSX 机器的这个 10.0.2.2 地址没有改变(除非你搞砸了虚拟机网络设置)宾果游戏,得到了我需要的东西。
关于docker - 允许通过 docker-machine 运行的容器在不使用 OSX DHCP 分配的 IP 地址的情况下连接父 OSX 系统上的 Mysql 或 XDEBUG 端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34458455/