我怎样才能让我的networking上的其他机器访问我的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 /]# 

我试图检查我的networking上是否可以从运行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 

我怎样才能使我的networking上的容器和其他机器看到对方?


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

如果你在docker-machine上使用VirtualBox驱动来运行你的Mac上的Docker虚拟机,那么你可以像下面这样将你的Mac端口转发给VM:

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

我们来分解一下:

  • VBoxManage是控制VirtualBox的可执行文件的名称。
  • controlvm告诉VirtualBox你正在告诉一个虚拟机(而不是虚拟机pipe理器)来做一些事情。
  • myvirtualmachine是你的Docker虚拟机的名字(你可以通过运行docker-machine ls来find它)。
  • natpf1告诉虚拟机创build一个NAT端口转发。 这就是魔法开始发生的地方。
  • 'myapp,tcp ,, 4505,,4505'natpf1的参数列表:
    • myapp是端口转发规则的名称。 这是可选的。
    • tcp是您想要转发的stream量types。 另一个选项是udp
    • 此时有一个主机IP的空间,但可以留空。
    • 4505是Mac上您想要接收stream量的端口。 这是您要给networking上其他主机的端口号。
    • 此时有一个客户IP的空间,但可以留空。
    • 第二个4505是你想要接收stream量的Docker虚拟机上的端口。 您可以将其更改为任何您喜欢的,而不会影响第一个端口。 你只需要改变你从Docker容器公开的端口。

你可以在https://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvmfind这个命令的官方文&#x6863;