我必须创build一个隧道来访问另一个主机上的docker集装箱吗?

在Vagrant下运行CoreOS的Ubuntu主机上,我有一个在端口80上运行nginx的docker容器。

docker run -v /home/core/share:/var/www:rw -p 80:80 -d nginx-example 

Ubuntu主机的IP在本地局域网上是192.168.2.2

在Ubuntu主机上,我可以浏览到http://172.17.8.101/并查看nginx容器提供的网页。

如果我想能够从局域网中的另一台计算机浏览到同一网页,是否需要创build一个SSH隧道,或者是否有其他一些机制可以帮助实现? 我知道172.17.8.101是在一个专用的networking范围,但不知道如何从LAN连接到它。 coreos在192.168范围内使用IP会更容易吗?

docker检查:

 "NetworkSettings": { "Bridge": "docker0", "Gateway": "10.1.42.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "10.1.0.12", "IPPrefixLen": 16, "IPv6Gateway": "", "LinkLocalIPv6Address": "fe80::42:aff:fe1:c", "LinkLocalIPv6PrefixLen": 64, "MacAddress": "02:42:0a:01:00:0c", "PortMapping": null, "Ports": { "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" } ] } }, 

从coreos的ifconfig

 docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.1.42.1 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::d81e:ceff:fee7:f6ef prefixlen 64 scopeid 0x20<link> ether b2:d5:75:c1:88:94 txqueuelen 0 (Ethernet) RX packets 46089 bytes 1871717 (1.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 91776 bytes 81647104 (77.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe0d:b324 prefixlen 64 scopeid 0x20<link> ether 08:00:27:0d:b3:24 txqueuelen 1000 (Ethernet) RX packets 332980 bytes 285337617 (272.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 172343 bytes 9961980 (9.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.8.101 netmask 255.255.255.0 broadcast 172.17.8.255 inet6 fe80::a00:27ff:fed1:9f09 prefixlen 64 scopeid 0x20<link> ether 08:00:27:d1:9f:09 txqueuelen 1000 (Ethernet) RX packets 114 bytes 34912 (34.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 93 bytes 10008 (9.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 

这不是一个生产系统 – 它只是一个家庭实验,以追求更多关于docker工人的知识

默认情况下,Dockerpipe理自己的容器内部networking。

一个简单的解决scheme可能是通过Vagrant设置映射的端口,让其他机器连接到主机(并通过Docker来访问)。

或者,Docker支持--net=host选项,允许容器直接通过主机的接口连接到外部世界,但是这样做会让你失去“docker-ness”的东西。

如果您想要构build更强大的解决scheme,则可以手动设置Dockernetworking,并实现到主机LAN的某种NAT网关。