允许容器 运行 通过 docker-machine 连接父 OSX 系统上的 Mysql 或 XDEBUG 端口,而不使用 OSX DHCP 分配的 IP 地址?
Allow a container running via docker-machine to connect with Mysql or XDEBUG port on parent OSX system without using an OSX DHCP assigned ip address?
我有以下设置:
- OSX 运行 MySQL 在端口 3306 侦听所有网络适配器
- XDEBUG 已启用 IDE 侦听基础 OSX 系统上的端口 9000。
- docker-OSX系统上的机器主机运行,主机ip为192.168.99.100
- 一个基于 debian 的 docker 容器,在 docker 主机上有一个 mysql 客户端 运行 和 HHVM 运行 xdebug 希望连接到一些幸运的远程端口 9000 上的主机。
由于是通过 DHCP 分配的,OSX 系统上的 IP 地址经常变化,所以我希望 docker 容器能够以某种方式访问 mysql服务器,无论本机 OSX 网络适配器分配的 IP 地址是什么(无需手动更新)。另外,我需要一个稳定的 ip,我可以为我的 HHVM server.ini 文件提供 Xdebug 的远程主机。
使用 运行 linux 的基本系统,这不是问题,因为 docker 主机和实际的本机 运行 docker 是一模一样。此外,容器可以通过多种方式了解主机的 ip,因此问题不在于 docker 主机。
但是,在 OSX 运行 docker 机器中,主机不是本机 OSX 系统,而是一个虚拟机 运行在虚拟框中(假设您使用的是 vb 驱动程序,而 sam hill blazes 不是?)。
我唯一能想到的就是将 3306 上的请求转发到 docker-机器主机(192.168.99.100,它永远不会改变)到 OSX 的端口 3306。然后让容器为 Mysql 请求命中 docker-machine 主机。如果这可行,我可以冲洗并重复我需要的任何端口 link 就像端口 9000 上的 xdebug。
有谁知道如何完成这个或有其他建议吗?
想出了一个解决方法,无需进行任何更改即可提供一致的 ip 以连接到基础 OSX 系统。 Docker 机器以这种方式进行设置,使这成为可能。
- Docker 机器创建一个带有 2 个网络适配器的 virtualbox VM,一个设置为仅主机,另一个设置为 NAT。不知道为什么它会创建 2,但是
- 仅主机适配器为 OSX 提供 192.168.99.1 的 ip,使用它的各种 VM 获得以 192.168.99.100 开头的地址。但是,在 VM 网络内部,您不能使用地址 192.168.99.1 访问父 OSX 系统上的端口(不知道为什么,但猜测 host 只是打算在 VM 之间进行通信)。
- 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 地址没有改变(除非你搞砸了 virtual box 网络设置)宾果游戏,得到我需要的东西。
我有以下设置:
- OSX 运行 MySQL 在端口 3306 侦听所有网络适配器
- XDEBUG 已启用 IDE 侦听基础 OSX 系统上的端口 9000。
- docker-OSX系统上的机器主机运行,主机ip为192.168.99.100
- 一个基于 debian 的 docker 容器,在 docker 主机上有一个 mysql 客户端 运行 和 HHVM 运行 xdebug 希望连接到一些幸运的远程端口 9000 上的主机。
由于是通过 DHCP 分配的,OSX 系统上的 IP 地址经常变化,所以我希望 docker 容器能够以某种方式访问 mysql服务器,无论本机 OSX 网络适配器分配的 IP 地址是什么(无需手动更新)。另外,我需要一个稳定的 ip,我可以为我的 HHVM server.ini 文件提供 Xdebug 的远程主机。
使用 运行 linux 的基本系统,这不是问题,因为 docker 主机和实际的本机 运行 docker 是一模一样。此外,容器可以通过多种方式了解主机的 ip,因此问题不在于 docker 主机。
但是,在 OSX 运行 docker 机器中,主机不是本机 OSX 系统,而是一个虚拟机 运行在虚拟框中(假设您使用的是 vb 驱动程序,而 sam hill blazes 不是?)。
我唯一能想到的就是将 3306 上的请求转发到 docker-机器主机(192.168.99.100,它永远不会改变)到 OSX 的端口 3306。然后让容器为 Mysql 请求命中 docker-machine 主机。如果这可行,我可以冲洗并重复我需要的任何端口 link 就像端口 9000 上的 xdebug。
有谁知道如何完成这个或有其他建议吗?
想出了一个解决方法,无需进行任何更改即可提供一致的 ip 以连接到基础 OSX 系统。 Docker 机器以这种方式进行设置,使这成为可能。
- Docker 机器创建一个带有 2 个网络适配器的 virtualbox VM,一个设置为仅主机,另一个设置为 NAT。不知道为什么它会创建 2,但是
- 仅主机适配器为 OSX 提供 192.168.99.1 的 ip,使用它的各种 VM 获得以 192.168.99.100 开头的地址。但是,在 VM 网络内部,您不能使用地址 192.168.99.1 访问父 OSX 系统上的端口(不知道为什么,但猜测 host 只是打算在 VM 之间进行通信)。
- 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 地址没有改变(除非你搞砸了 virtual box 网络设置)宾果游戏,得到我需要的东西。