如何让我的网络上的其他计算机访问我的Docker容器(使用端口映射)?

时间:2016-02-04 16:20:02

标签: docker

我在OS X(VirtualBox驱动程序)上运行了最新的Docker Toolbox RC

Docker主机的IP是:

$ docker-machine ip
192.168.99.100

我正在运行这样的容器:

$ docker run -ti -p 4505:4505 my_image /bin/bash
[root@blah /]#

我试图检查是否可以从我的网络上运行Windows 10的完全不同的计算机访问此端口:

$ nmap -p 4505 192.168.99.100

Starting Nmap 7.01 ( https://nmap.org ) at 2016-02-04 17:18 W. Europe Standard Time
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 0.74 seconds

如何让网络上的容器和其他机器相互看到?

编辑:下面接受的答案可以通过物理机的IP地址访问指定端口上的容器。也就是说,您不能通过192.168.99.100:4505访问容器。相反,它可以通过您的计算机<IP>:4505进行访问。

1 个答案:

答案 0 :(得分:1)

如果您正在使用带有docker-machine的VirtualBox驱动程序在Mac上运行Docker VM,那么您可以将端口从Mac转发到VM,如下所示:

VBoxManage controlvm myvirtualmachine natpf1 'myapp,tcp,,4505,,4505'

让我们打破这个:

  • VBoxManage 是控制VirtualBox的可执行文件的名称。
  • controlvm 告诉VirtualBox您要告诉VM(而不是VM管理员)做某事。
  • myvirtualmachine 是您的Docker VM的名称(您可以通过运行docker-machine ls来找到它。)
  • natpf1 告诉VM创建一个NAT端口转发。这就是魔术开始发生的地方。
  • &#39; myapp,tcp ,, 4505,,4505&#39; natpf1 的参数列表:
    • myapp 是端口转发规则的名称。它是可选的。
    • tcp 是您要转发的流量类型。另一个选项是 udp
    • 此时主机IP还有空间,但您可以将其留空。
    • 4505 是Mac上要接收流量的端口。这是您将为网络上的其他主机提供的端口号。
    • 此时有客人IP的空间,但您可以留空。
    • 第二个 4505 是您希望接收流量的Docker VM上的端口。您可以将其更改为您喜欢的任何内容,而不会影响第一个端口。您只需要更改从Docker容器中公开的端口。

您可以在https://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm

找到此命令的官方文档