9

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

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

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

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解释如何从不同的主机访问。也许我需要提高我的谷歌搜索技能。

4

5 回答 5

8

这对我有用

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

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

于 2016-02-25T09:35:06.510 回答
5

好的,所以我找到了比尝试使用桥接网络适配器更好的方法。我在关于端口转发的 boot2docker 文档中找到了它。

只需使用VBoxManage modifyvm default --natpf1 "my_web,tcp,,8080,,80" 或使用 VirtualBox GUI 来指定 NAT 适配器的端口转发。

然后,-p从 docker run 命令中删除该选项并--net=host改用。那是代替

docker run -d -p 8080:80 --name=web nginx

利用

docker run -d --net=host --name=web nginx

瞧!您的 Web 服务器位于主机上的 localhost:8080 或 LAN 上的 YOURHOSTIP:8080 上。

请注意,使用--net=host可能会扰乱 VM 上容器之间的通信,但由于这是我计划运行的唯一容器,它对我来说非常有用。

于 2015-09-16T18:25:24.527 回答
1

在带有Docker Toolbox for Mac的机器上,我正在解决以下问题(使用default机器)。

准备

  1. 如果机器正在运行,请停止机器:

    docker-machine stop default

VirtualBox 设置

  1. 打开 VirtualBox,选择default机器,打开设置 ( Cmd-S),进入网络,然后选择“适配器 3”。

  2. 选中“启用网络适配器”(将其打开)。

  3. 将“附加到”设置为“桥接适配器”。
  4. 将名称设置为“en0:以太网”(或任何主要网络接口或您的 Mac)。
  5. 披露“高级”,并确保选中“已连接电缆”。
  6. 请注意“适配器 3”的“MAC 地址”(稍后我们将使用它)。
  7. 按“确定”保存设置。

码头工人设置

  1. 现在,回到终端,启动机器:

    docker-machine start default

  2. 以防万一,重新生成证书:

    docker-machine regenerate-certs default

  3. 更新环境:

    eval $(docker-machine env default)

此时,机器应该正在运行(默认 IP 地址为 192.168.99.100,只能从宿主 Mac 访问)。但是,如果你 ssh 进入 docker VM ( docker-machine ssh default) 并运行ifconfig -a,你会看到 VM 的接口之一(eth0在我的例子中)有一个与你的 Mac 在同一个网络中的 IP(例如 192.168.0.102),可以从LAN 上的其他设备。

路由器设置

现在,最后一步是确保该地址是固定的,并且不会被路由器的 DHCP 不时更改。这可能因路由器而异,以下适用于我的简洁 TP-LINK 路由器,但应该可以轻松调整到其他品牌和型号。

  1. 打开您的路由器设置,首先检查default路由器的 DHCP 客户端列表中是否包含上述步骤 7 中的 MAC 地址。

  2. 在路由器设置中打开“DHCP”>“地址保留”,并添加“适配器 3”MAC 地址(您可能需要插入缺少的破折号)和您想要的 IP(例如 192.168.0.201)。

  3. 现在我的路由器要求我重新启动它。重新启动后,运行docker-machine restart defaultDocker VM 以获取其新 IP 地址。

  4. 最终验证:docker-machine ssh default,然后ifconfig -a,在输出中找到你的新 IP 地址(这次接口是eth1)。

结果

从主机 Mac 可以通过两个地址(192.168.99.100 和 192.168.0.201)访问机器;从 LAN 中的其他设备可以访问 192.168.0.201。

于 2017-02-15T17:49:44.243 回答
0

这个问题的主要用例是从主机(Mac)机器或主机(Mac)网络中的其他机器访问容器中运行的应用程序

一旦容器应用程序启动并暴露如下

docker run -d -p 8080 <<image-name>>

然后找到主机(Mac)端口与容器端口之间的映射,如下所示

docker port <<container-name>>
sample output : 8080/tcp -> 0.0.0.0:32771

现在从您的主机(Mac)网络中的任何机器访问容器应用程序作为主机(Mac IP):32771

于 2016-12-29T02:39:40.250 回答
0

如果我将第一张网卡从NAT桥接更改为我也无法连接到它。

我发现工作是添加第三个网卡,将其设置为桥接模式并将适配器类型更改Intel PRO/1000 MT Desktop (82540EM). boot2docker发行版可能不支持默认值。

在 github 上查看我的评论。

于 2019-03-13T21:47:27.910 回答