代码之家  ›  专栏  ›  技术社区  ›  Ray

允许通过docker机器运行的容器与父OSX系统上的Mysql或XDEBUG端口连接,而不使用OSX DHCP分配的ip地址?

  •  8
  • Ray  · 技术社区  · 9 年前

    我有以下设置:

    • OSX在端口3306的所有网络适配器上运行MySQL
    • 在基本OSX系统上的端口9000上启用了XDEBUG的IDE侦听。
    • 在OSX系统上运行的docker机器主机,主机ip为192.168.99.100
    • 一个基于debian的docker容器,其中mysql客户端运行在docker主机上,HHVM与xdebug一起运行,希望连接到端口9000上的某个幸运的远程主机。

    由于通过DHCP分配ip地址,因此OSX系统上的ip地址频繁更改,因此我希望docker容器能够以某种方式访问mysql服务器,而不管本地OSX网络适配器分配了什么ip(无需手动更新)。此外,我需要一个稳定的ip,我可以提供我的HHVM服务器。ini文件是Xdebug的远程主机。

    对于运行linux的基本系统,这不是问题,因为docker主机和实际运行docker的本机是一个相同的机器。此外,容器有几种方法可以了解主机的ip,因此问题不会影响到docker主机。

    然而,在运行OSX的docker机器中,主机不是本机OSX系统,而是一个在虚拟机中运行的VM(假设您使用的是vb驱动程序,而山姆希尔所使用的不是?)。

    我唯一能想到的是将3306上的请求转发到docker机器主机(192.168.99.100,永远不会改变)到OSX的端口3306。如果这起作用,我可以像xdebug一样在端口9000上清洗和重复我需要链接的任何端口I端口。

    有人知道如何实现这一目标吗,或者有其他建议吗?

    1 回复  |  直到 9 年前
        1
  •  18
  •   Ray    9 年前

    找到了一条出路,无需进行任何更改,即可在基本OSX系统上提供一致的ip连接。Docker机器以这样一种方式进行设置,使其成为可能。

    • Docker机器创建了一个带有2个网络适配器的虚拟机,其中一个设置为主机,另一个设置成NAT。不知道为什么它会创建2个,但是
    • 仅主机适配器为OSX提供了192.168.99.1的ip,使用它的各种虚拟机的地址以192.168.89.100开头。但是,在虚拟机网络中,您不能使用地址192.1689.9.1访问父OSX系统上的端口(不确定原因,但猜测主机只打算在虚拟机之间进行通信)。
    • NAT网络适配器设置为OSX get的ip 10.0.2.2和VM get的10.0.2.15。通过NAT,您可以在10.0.2.2从docker主机VM和主机上运行的容器路由到OSX系统。

    由于OSX机器的10.0.2.2地址没有改变(除非你改变了虚拟机的网络设置),所以我得到了我需要的。