docker - 允许通过 docker-machine 运行的容器在不使用 OSX DHCP 分配的 IP 地址的情况下连接父 OSX 系统上的 Mysql 或 XDEBUG 端口?

标签 docker virtualbox docker-machine

我有以下设置:

  • 运行 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/

相关文章:

docker - 无法在UNIX环境中执行Docker命令

docker - 区 block 链 : Hyper Ledger Fabric Installations in Windows 10

apache-spark - 如何检查 PySpark 使用了多少个内核?

docker-machine - 无法成功创建 docker 机器 : Error creating machine

docker - Azure VM Windows 10上的docker

docker - 在tarball上使用docker load时,我得到了无效的参数

node.js - 通过 wercker.yml 公开应用程序的端口

linux - Ubuntu 错误地显示磁盘空间不足

networking - 多台 VirtualBox 机器之间的网络链接

jenkins - Docker "Jenkins"图像无法访问互联网