2016-02-29 15 views
5

Potrzebuję utworzyć niektóre kontenery dokowane, które muszą być dostępne dla innych komputerów w tej samej sieci.Jak udostępnić kontener Docker innym komputerom sieciowym za pośrednictwem IP?

Problem polega na tym, że podczas tworzenia kontenera Docker pobiera adresy IP ważne tylko w hoście.

Już zapoznałem się z dokumentacją Docker (Networking), ale nic nie zadziałało.

Po uruchomieniu ifconfig na moim komputerze mój adres IP to 172.21.46.149. Kiedy wchodzę do kontenera (Ubuntu) i uruchamiam ifconfig, adres IP to 172.17.0.2. Potrzebuję Dockera, aby uzyskać na przykład 172.21.46.150.

Jak mogę to zrobić?

+0

Czy byłoby dobrze, gdyby twój kontener bezpośrednio wiązał port hosta do komunikacji? – Auzias

Odpowiedz

1

Kontenery dokowane mogą być łatwo dostępne przez inny węzeł sieci, gdy kontener: port jest publikowany przez port host: port.

Odbywa się to za pomocą opcji prowadzenia dokiem w doku pod numerem -p. Oto suma-up człowieka-strony ($man docker-run daje więcej szczegółów i przykładem, że nie będą kopiuj/wklej):

-p, --publish=[] 
     Publish a container's port, or range of ports, to the host. 

Zobacz doc online. Ta question/answer również może być interesująca.

Zasadniczo:

docker run -it --rm -p 8085:8080 my_netcat nc -l -p 8080

pozwoliłoby węzły sieci LAN do łączenia się z Döcker gospodarzowi-IP: 8085 i omówić z poleceniem netcat.

+0

Problem z tym rozwiązaniem polega na tym, że kiedy będę rozwijać swoje środowisko, sprawy staną się trochę chaotyczne, tak długo, jak będę miał wiele pojemników ... –

+0

Cóż ... Możesz chcieć edytować swoje pytanie, aby było bardziej zrozumiałe. Czy rzeczywiście potrzebujesz wszystkich kontenerów w tej samej sieci LAN, co host LAN? Rozumiem powód wielu kontenerów, ale wątpię, aby host miał więcej niż 65 000 kontenerów (co powodowało brak gniazda do powiązania). Pamiętaj, że najlepszą praktyką Docker jest ["Caas"] (https://stackoverflow.com/questions/35610995/consul-and-tomcat-in-the-same-docker-container#comment58922618_35610995) i według CaaS kontener (który ma uruchamiać pojedynczą usługę) powinien wymagać tylko jednego portu, dwóch lub trzech w wyjątkowych przypadkach obsługi wielu portów. – Auzias

2

dostęp Wielu gospodarz obejmuje sieć nakładki z odkryciem usług.
Zobacz docker/networking:

Sieć nakładka wymaga sklep klucz-wartość. Magazyn przechowuje informacje o stanie sieci, które obejmuje wykrywanie, sieci, punkty końcowe, adresy IP i inne.
Silnik Docker obsługuje obecnie magazyny przechowujące pary klucz-wartość Consul, etcd, ZooKeeper (Sklep rozprowadzany) i BoltDB (Magazyn lokalny).
W tym przykładzie użyto programu Consul.

https://github.com/docker/dceu_tutorials/raw/master/images/tut6-step1.png

przypadku jeśli węzły (inne komputery w tej samej sieci) prowadzi ich Döcker demona z odniesieniem do tego sklepu klucz-wartość, będą mogli komunikować się z pojemników z innych węzłów .

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://<NODE-0-PRIVATE-IP>:8500/network --cluster-advertise=eth0:2375" 

Wystarczy utworzyć sieć nakładki:

docker network create -d overlay --subnet=10.10.10.0/24 RED 

(będzie ona dostępna we wszystkich komputerach z powodu sklepie klucz-wartość)

i uruchomić pojemników na tej sieci :

docker run -itd --name container1 --net RED busybox