2015-11-20 14 views
7

próbuję uzyskać następujące dość podstawowe (lub tak myślałem) sieci konfigurację do pracy przy użyciu Docker 1.9:Docker Networking: Auto-odkrywania nazwy hostów w sieci mostu

  • mam wiele pojemników, które działają usługi, np pojemnik postgres i pojemnik python (może być ich więcej niż dwa).
  • Kontenery te są połączone ze sobą za pośrednictwem sieci bridge.
  • Chcę, aby były adresowalne przy użyciu unikalnych nazw hosta (tzn. Kontener Python powinien być w stanie wykonać ping postgres, aby wysłać polecenie ping do kontenera PostgreSQL).

Po samouczek (https://docs.docker.com/engine/userguide/networking/dockernetworks/), można użyć następującej sekwencji poleceń do osiągnięcia tego celu:

#create the containers 
docker run -itd --name container1 busybox 
docker run -itd --name container2 busybox 
#create the network 
docker network create test 
docker network connect test container1 
docker network connect test container2 

Działa to całkiem dobrze i Docker poprawnie ustawia pozycje w etc/hosts zwrócić do właściwego adresu IP adresy. Jednak chcę również móc jednocześnie uruchamiać kilka instancji tej konfiguracji (tj. Kontenerów + sieć). To nie działa, ponieważ wpis dla każdego kontenera w pliku /etc/hosts jest równy jego nazwie o nazwie, która musi być unikalna. Określenie parametru hostname nie rozwiązuje tego problemu, ponieważ zmienia on tylko nazwę hosta kontenera (tj. Tę, którą sam widzi).

Byłbym bardzo zainteresowany sposobem na zrobienie tego bez konieczności posiadania usługi DNS uruchomionej na kontenerze. Wydaje się, że jest to prosty problem, ale niestety nie udało mi się znaleźć żadnych opcji konfiguracyjnych, aby zmienić nazwę kontenera w pliku /etc/hosts.

BTW, chcę, aby nazwa hosta była taka sama w każdym przypadku mojej konfiguracji sieci + kontenera, aby nie musiałem dynamicznie przekazywać nazw hostów do kontenera (np. Aby przekazać kontenerowi Python adres kontenera PostgreSQL)

EDIT: zrobiłem rozeznanie w emisyjnej trackera Döcker i nie wydaje się być cechą tego w rurociągu: https://github.com/docker/libnetwork/issues/737

+1

To jest bardzo ważne pytanie: ['--link : alias'] (https://docs.docker.com/v1.8/reference/run/#env-environment-variables) ([ "Starsze linki"] (http://docs.docker.com/engine/userguide/networking/dockernetworks/#legacy-links)) pozwoliło ci zdefiniować "alias" między dwoma kontenerami (zarządzanymi przez tego samego demona docker). Ten alias może być ponownie użyty przez różne "operacje dokowania", dzięki czemu każdy kontener może zobaczyć swój własny alias połączony z kontenerem (z tym samym aliasem). Nie znalazłem tej samej funkcji z nowym libnetwork. – VonC

+0

Tak, również o tym czytam, nie mogłem znaleźć podobnej funkcji w wersji 1.9 – ThePhysicist

Odpowiedz

5

docker 1.10, and PR 19242 może pomóc:

docker create --net-alias=[]: Add network-scoped alias for the container 

doker 1.10 ma nową sekcję Network-scoped alias:

Podczas linki zapewnić rozpoznawanie nazw prywatny, który jest zlokalizowany w pojemniku, alias sieci scoped zapewnia drogę do pojemnika na odkrycie przez alternatywnej nazwy wg każda inna kontener w ramach określonej sieci.
W przeciwieństwie do aliasu łącza, zdefiniowanego przez konsumenta usługi, alias o zasięgu sieciowym jest definiowany przez kontener oferujący usługę w sieci.

Kontynuując w powyższym przykładzie, utwórz kolejny kontener w isolated_nw za pomocą aliasu sieciowego.

$ docker run --net=isolated_nw -itd --name=container6 --net-alias app busybox 
8ebe6767c1e0361f27433090060b33200aac054a68476c3be87ef4005eb1df17 

Teraz nam połączyć container6 do sieci local_alias z innym aliasem o zasięgu sieci.

$ docker network connect --alias scoped-app local_alias container6 

container6 w tym przykładzie teraz jest aliasie app w sieci isolated_nw i jak scoped-app w sieci local_alias.

Powiązane problemy