如何从主机外部(同一网络)连接到Docker容器[OSX 10.11]

9

设置:

  • 计算机A - 这是Docker Machine“default”在VirtualBox下运行的地方。“default”正在运行名为“Odoo”的容器。“default”是使用Docker的安装过程创建的。“Odoo”是使用Odoo的安装过程创建的。
  • 计算机B - 这是与计算机A在同一局域网(LAN)上的计算机。
  • 路由器 - 这将计算机A和计算机B连接在LAN上。

软件:

  • 计算机A - OSX 10.11.3 / VirtualBox 5.0.18 / Docker 1.11
  • 计算机B - Windows 7 / Firefox
  • 路由器 - ASUSWRT

问题:

  • 使用“默认”的IP地址加上Odoo相应的端口号,可以从计算机A访问Odoo。一个示例地址是:192.168.99.101:8069。
  • 使用“默认”的IP地址加上Odoo相应的端口号,无法从计算机B访问Odoo。

解决方法:

  • 如何配置VirtualBox环境,以使计算机B可以在LAN上访问Odoo?
2个回答

9

192.168.99.101是计算机A内部Docker主机的IP地址。您只需要将默认端口8069配置为从主机机器的端口8069进行端口转发。然后,使用计算机A的IP地址(例如10.0.1.22)加上端口8069,计算机B就可以访问odoo了。由于两台计算机位于同一网络中,所以您不需要更改路由器的设置(除非有防火墙设置)。

10.0.1.22:8069

需要在VirtualBox的设置中设置端口转发。
图片1:enter image description here 图片2:enter image description here

谢谢@Awakening Byte。你的方法比我发的那个干净多了。早些时候我尝试过类似的东西,但是规则的条目弄错了。 - JP Staub
@Awakening Byte 我正在使用Kitematic在Windows上运行Docker容器内的Jupyter服务器,暴露给主机的端口似乎总是在变化。有没有办法将所有大于30000的端口号转发到VM中的8888端口? - PaulDong
对于在不同机器上的Selenium-Docker(hub和node),我做了以下几件事情:1)在计算机A的“默认”虚拟机上进行端口转发,如上所述;2)从计算机B注册节点;3)还要在机器B的“默认”虚拟机上进行端口转发...第三步是最重要的,如果您不这样做,那么Selenium Hub将无法与机器B上的Docker镜像(其中Selenium Node停留)通信。 - sjethvani
1
关于在不同机器上设置Selenium Hub/Node的详细说明,请参考http://stackoverflow.com/questions/40593802/docker-selenium-hub-not-accessible-from-different-machine-in-same-network-doc/40605916#40605916。 - sjethvani

3

注意!

修改网络适配器1的解决方案更容易实现。这是推荐的解决方案。

背景:

Docker安装后,在VirtualBox中创建了一个名为“default”的虚拟机(VM)。Docker在VirtualBox中设置了一种网络配置,使主机电脑(计算机A)可以通过docker-machine IP访问在"default"上运行的容器。但是,计算机B无法通过docker-machine IP访问相同的容器。

基本过程:

  1. 通过Oracle的VM VirtualBox Manager调整VM“default”的设置以形成桥接网络
  2. 启动“default” VM。
  3. 找到“default” VM的桥接网络IP(BN-IP)地址。
  4. 启动Odoo容器。
  5. 在计算机B的Web浏览器中输入BN-IP地址加上Odoo的端口(例如192.168.1.93:8069)。
  6. 享受(除非出现故障,常常如此)。

调整VM“default”的设置

  1. 打开VirtualBox GUI。
  2. 查看GUI左侧的VM列表。
  3. 单击“default”(或要修改的VM)
  4. 单击“设置”图标(齿轮对象)
  5. 按照屏幕截图操作。注意:如果使用以太网电缆连接LAN,请选择en0而不是en1。Mac地址已被屏蔽。它应该会自动填充。enter image description here

  6. 启动“default” VM

    对于Mac来说,最简单的方法是点击Docker QuickStart Terminal图标启动“default” VM。

enter image description here

等待一两分钟后,您将看到一个启动画面,其中包含“default” IP。这不是您要找的BN-IP。 enter image description here

查找“default” VM的BN-IP地址

这是重点且让我烦恼了几个小时的部分。幸运的是,有很好的网络发现说明书存在。在Docker终端中运行说明书,就应该会出现“default.YourLANDomain”的地址。它看起来像这样:
default.ripcord.lan (192.168.1.93) at x:x:xx:xx:xx:xx on en1 ifscope [ethernet]
请注意上述地址中的“default”部分。这是Docker VM的名称,方便进行人工识别。
如果以上方法无法找到“default” VM的BN-IP,您可以尝试查看路由器所见的内容(请参见下面的示例)。请注意,“jakes-macbook”在设备图标旁有一个“2”注释。这意味着有两个客户端与该图标相关联。192.168.1.24不是“default” VM的BN-IP。IP地址会在奇怪的时间里来回切换。另一个地址192.168.1.93是“default” VM的BN-IP。
启动Odoo容器,然后使用BN-IP地址192.168.1.93:8069(例如)在计算机B上访问它。太棒了!希望如此……
故障排除:使用ping尝试确定“default” VM的BN-IP是否处于活动状态,然后从那里开始使此方法工作。对于更清洁的解决方案,请参阅有关修改网络适配器1的方法。它是一种更容易实现的方法。

谢谢。第二个解决方案非常好用,感谢您提供有关硬件 IP 查找的信息。我在使用 Windows,所以提供的链接不起作用,但我的路由器成功显示了 IP 地址。 - Cyril CHAPON
值得注意的是将“适配器类型”更改为“Intel PRO/1000 MT Desktop (82540EM)”。如果您保留默认设置的“PCnet-FAST III (Am79C973)”,它将无法正常工作。请参阅我的评论 - Petr Újezdský
你好,你知道如何将默认虚拟机的桥接IP设置为静态IP吗? - Zaman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接