如何使网络上的其他计算机访问我的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访问它.

最佳答案
如果您将VirtualBox驱动程序与docker-machine一起使用以在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端口.这就是魔术开始发生的地方.
>’myapp,tcp ,, 4505,,4505’是natpf1的参数列表:

> myapp是端口转发规则的名称.它是可选的.
> tcp是您要转发的流量类型.另一个选项是udp
>此时,主机IP仍有空间,但是您可以将其留空.
> 4505是Mac上您要接收流量的端口.这是您要提供给网络上其他主机的端口号.
>此时,访客IP仍有空间,但是您可以将其留空.
>第二个4505是Docker VM上您要接收流量的端口.您可以将其更改为所需的任何值,而不会影响第一个端口.您只需要更改从Docker容器公开的端口即可.

您可以在https://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm找到此命令的官方文档

转载注明原文:如何使网络上的其他计算机访问我的Docker容器(使用端口映射)? - 代码日志