如何绑定VM docker-machine创build的OSX IP地址?

我在OSX上使用最新的Docker工具包在本地开发Docker。 我有一个在Docker容器中运行的节点服务器,绑定到虚拟机的端口9999。 我可以从我的Mac上的浏览器中打这个服务器,我想从同一个networking上的另一个设备。 有没有办法将VM绑定到机器的IP地址? 或以其他方式暴露它?

我今天就明白了这一点! 我在Mac OS 10.10.5上使用了docker-machine和virtualbox。 我尝试的第一件事是将networking接口从NAT更改为桥接。 这只是打破了docker机与虚拟机通信的能力。

相反,我添加了桥接模式下运行的另一个networking适配器。 启动docker-machine后,我得到这个:

$ docker-machine ip redis-test 10.222.11.242 

这是一个本地networking地址,可以从我的办公室的其他人或我的VPN访问。

那么如果我运行如下的东西:

 $ docker run -p 6379:6379 -d redis 

我在10.222.11.242地址的6379端口上运行了一个集装箱化的redis服务。

所以我可以从networking上的任何其他地方做到这一点:

 $ telnet 10.222.11.242 6379 Trying 10.222.11.242... Connected to 10.222.11.242. Escape character is '^]'. info $1827 # Server redis_version:2.8.19 ... 

作为一个很酷的奖励,我们可以像这样重新映射端口:

 $ docker run -p 8080:6379 -d redis e7cc53d9c157a658041c3bee5967dd3678b4d35e6146a02220a87bfebfc919ad $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7cc53d9c157 redis "/entrypoint.sh redis" 7 seconds ago Up 6 seconds 0.0.0.0:8080->6379/tcp goofy_yonath bf1dc6c7c6b5 redis "/entrypoint.sh redis" 51 minutes ago Up 51 minutes 0.0.0.0:6379->6379/tcp redis 

现在我有两个redis实例在同一个IP的不同端口(6379和8080)上侦听。

编辑:这里有一些细节,以帮助那些在VirtualBox添加到虚拟机的NIC的困惑。 我只用了VirtualBox,不能提供其他虚拟系统configuration的build议。

  1. 通过在VM Manager中selectVM并使用右键菜单或按下“command-F”来停止VM。
  2. 点击“设置”。
  3. 点击“networking”。
  4. select一个当前未启用的适配器。
  5. 启用它。
  6. 在“Attached to”选项中select“Bridged Adapter”。
  7. 点击OK。
  8. 启动您的虚拟机并尝试一下。

注:我确信有一些聪明的命令行选项来做这个设置,但因为我只需要设置一次,我从来没有打扰到自动化。

你把公布命令放在Dockerfile中吗?

 EXPOSE 9999 

您可以在VirtualBox NAT适配器上设置端口转发。

将其桥接到本地networking(在上面的答案中)与使用OSX IP地址不同。 如果您在笔记本电脑上并且移动到不同的互联网连接,桥接有时会导致额外的麻烦。 虚拟机可能不会自动从新networking中提取新的IP地址等

在用户界面去设置 – >networking – >端口转发或从命令行是这样的:

 VBoxManage controlvm "default" natpf1 "tcp-port9999,tcp,,9999,,9999"; 

其中“default”是虚拟机的名称(“默认”通常用于docker-machine),9999是你想要映射的端口。

更多信息: https : //github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

https://www.virtualbox.org/manual/ch06.html (使用NATconfiguration端口转发)