macos - 如何从另一台主机访问在 MacOSX 上运行的 docker 容器?

标签 macos docker virtualbox docker-machine

我正在尝试开始使用 docker 并希望运行 Ubiquiti video controller .我已经安装了 Docker Toolbox 并设法让容器在我的 Yosemite 主机上运行,​​并且可以通过转到 docker-machine ip default 返回的 IP 在同一个 mac 上访问它。但我想在网络上的其他机器上访问它,并最终在我的家庭路由器上设置端口转发,以便我可以在家庭网络之外访问它。

正如 boot2docker issue 160 中的建议,使用 Virtualbox GUI,我能够添加桥接网络适配器,但重新启动 VM docker-machine 后无法再与 VM 连接。 docker env default 挂了很长时间,但最终返回了一些环境变量以及消息Maximum number of retries (60) exceeded。当我使用这些变量设置 shell 并尝试运行 docker ps 时,我收到错误:尝试连接时发生错误:获取 https://10.0.2.15:2376/v1。 20/containers/json: dial tcp 10.0.2.15:2376: network is unreachable.

我怀疑 docker-machine 对 VM 中的网络配置有一些假设,我将它们搞砸了。

docker-machine ssh ifconfig -a 返回以下内容:

docker0   Link encap:Ethernet  HWaddr 02:42:86:44:17:1E  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

dummy0    Link encap:Ethernet  HWaddr 96:9F:AA:B8:BB:46  
          BROADCAST NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 08:00:27:37:2C:75  
          inet addr:192.168.1.142  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe37:2c75/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2996 errors:0 dropped:0 overruns:0 frame:0
          TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:278781 (272.2 KiB)  TX bytes:6824 (6.6 KiB)
          Interrupt:17 Base address:0xd060 

eth1      Link encap:Ethernet  HWaddr 08:00:27:E8:38:7C  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fee8:387c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:767 errors:0 dropped:0 overruns:0 frame:0
          TX packets:495 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:122291 (119.4 KiB)  TX bytes:116118 (113.3 KiB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:A4:CF:12  
          inet addr:192.168.99.100  Bcast:192.168.99.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fea4:cf12/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:430 errors:0 dropped:0 overruns:0 frame:0
          TX packets:322 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:53351 (52.1 KiB)  TX bytes:24000 (23.4 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0 似乎从我的路由器获得了合理的 DHCP 地址。

我不确定这是否是正确的方法,或者我是否找错了树。如果我可以让桥接网络适配器在 VM 上工作,我不知道如何说服我的 docker 容器使用它。我试过在互联网上搜索高低。我找到了几十个站点,这些站点解释了您需要如何使用 docker-machine ip default 而不是 localhost 的值来访问容器,但没有解释如何从不同的主机。也许我需要提高我的谷歌搜索技能。

最佳答案

这对我有用

  • 在虚拟机停止的情况下添加第三个“桥”网络
  • 使用 docker-machine start machine-name 启动虚拟机
  • 使用 docker-machine regenerate-certs machine-name 重新生成证书

使用 docker-machine ls 检查是否正常

关于macos - 如何从另一台主机访问在 MacOSX 上运行的 docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32594196/

相关文章:

xcode - 如何在 Xcode 项目中包含 txt 文件?

python - "Compiling" python 脚本

macos - 无法编译基本的 rust 文件

docker -/usr/lib/x86_64-linux-gnu/libLLVM-4.0.so.1 : version `LLVM_4.0' not found

macos - VirtualBox:MacOS Sierra 上出现 NS_ERROR_FAILURE 错误

virtualbox - 无论如何要在虚拟机上运行 Kinect?

python - 在 OS X 中创建包安装程序——安装 Python、NumPy 和其他依赖项

python - 在docker容器中为django运行cron作业时manage.py脚本中出现错误

maven - 在生产中使用 Jenkins 进行 Docker 工作流设计

postgresql - 无法从 Windows 主机上运行的 PGAdmin 连接到在 Docker 中运行的 Postgres