2015-05-15 1 views
1

На хост Ubuntu работает CoreOS под Vagrant, у меня есть докер контейнер бега Nginx на порт 80.Должен ли я создать туннель для доступа к контейнеру докеров на другом хосте?

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

Убунту хозяина IP является 192.168.2.2 в локальной сети

На хосте Ubuntu, Я могу просматривать http://172.17.8.101/ и просматривать веб-страницу, обслуживаемую контейнером nginx.

Если я хочу, чтобы иметь возможность просматривать одну и ту же веб-страницу с другого компьютера в локальной сети, мне нужно создать туннель SSH или есть какой-то другой механизм, который облегчил бы это? Я знаю, что 172.17.8.101 находится в частном сетевом диапазоне, но я не уверен, как подключиться к нему из локальной сети. Было бы проще, если бы ядро ​​использовало IP-адрес в диапазоне 192.168?

докер инспектировать:

"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" 
       } 
      ] 
     } 
    }, 

ifconfig из coreos:

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 

Это не система производства - это просто домашний эксперимент в погоне за больше узнать о докер

ответ

0

По default, Docker управляет собственной внутренней сетью для контейнеров.

Простым решением может быть настройка отображаемых портов через Vagrant и подключение других компьютеров к хосту (и переход к гостям Docker).

В качестве альтернативы, Docker поддерживает опцию --net=host, позволяя контейнерам подключаться к внешнему миру непосредственно через интерфейсы хоста, но затем вы теряете «докеры» вещей.

Если вы хотите построить более надежное решение, вы можете set up the Docker networking manually и получить какой-то NAT-шлюз для локальной сети хоста.

+0

Спасибо. Я думаю, что этот ответ можно было бы улучшить, ссылаясь на все вовлеченные слои - хост-OS (Ubuntu), гость CoreOS и виртуальные сети, созданные как Vagrant, так и Docker. Оглядываясь назад, я думаю, что вопрос скорее связан с виртуальными сетями Vagrant, чем с Docker's – codecowboy

Смежные вопросы