Pytanie Jak dotrzeć do kontenerów dokerów według nazwy zamiast adresu IP?


Czy istnieje sposób, w jaki mogę dotrzeć do kontenerów dokerów używając nazw zamiast adresów IP?

Słyszałem o pipework i widziałem niektóre dns i opcje nazwy hosta dla docker, ale nadal nie jestem w stanie złożyć wszystko razem.

Dziękuję za Twój czas.

Nie jestem pewien, czy to jest pomocne, ale to, co zrobiłem do tej pory:

  • zainstalowany host kontenera dokera za pomocą programu dokowanego i sterownika vmwarevsphere
  • uruchomił wszystkie usługi za pomocą docker-compose
  • Mogę dotrzeć do wszystkich usług z dowolnego innego komputera w sieci przy użyciu adresu IP i portu

Dodałem wpis aliasu DNS do mojego prywatnego serwera DNS w sieci i pasuje on do nazwy komputera używanej przez maszynę dokujaca. Ale maszyna zawsze wybiera inny adres IP, gdy uruchamia się i łączy się z siecią.

Po prostu nie wiem, gdzie to rozwiązać:

  • sieciowy serwer DNS
  • nazwa hosta docker-machine
  • nazwa hosta kontenera dokowanego
  • prawdopodobnie pewna kombinacja ich wszystkich

Prawdopodobnie szukam czegoś podobnego do tego pytania:

W jaki sposób można pozwolić dockerowi na korzystanie z mojego rutera sieciowego w celu łatwego przydzielania kontenerów IP do kontenerów zamiast rurociągów?

Każdy ogólny kierunek będzie niesamowity ... jeszcze raz dziękuję!


21
2018-06-30 22:16


pochodzenie




Odpowiedzi:


Doker 1.10 ma wbudowany DNS. Jeśli twoje pojemniki są połączone z tym samym określony przez użytkownika sieć (utwórz sieć docker network create my-network i uruchom swój pojemnik przy pomocy --net my-network) mogą odwoływać się do siebie używając nazwy kontenera. (Dokumenty).

Chłodny!

Jedno zastrzeżenie, jeśli używasz Docker Compose, wiesz, że dodaje prefiks do nazw twoich kontenerów, tj. <project name>_<service name>-#. To sprawia, że ​​nazwy twoich kontenerów są trudniejsze do kontrolowania, ale może to być w porządku dla twojego przypadku użycia. Możesz nadpisanie funkcji tworzenia nazw doków przez dokowanie poprzez ręczne ustawienie nazwy kontenera w szablonie tworzenia, ale wtedy nie będzie można przeskalować z komponowaniem.


12
2018-02-29 04:13



(Korekta) Właśnie zobaczyłem ostatnią część, którą napisałeś o skalowaniu, teraz widzę, skąd przybywasz! (Oryginał) Powinieneś być w stanie używać docker-compose.yml i nastaw container_name: anything w ramach usługi i nie powinien niczego poprzedzać, ale poprawić mnie, jeśli się mylę, robiłem to często w niestandardowej sieci. - JREAM


Możesz wypróbować dnsdock. Wygląda prosto i łatwo (!) Do konfiguracji. Spójrz na http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/ i https://github.com/tonistiigi/dnsdock .


4
2017-07-02 06:27





EDYCJA 2018-02-17: Docker może ostatecznie usunąć links klucz od docker-compose, dlatego sugerują użycie sieci zdefiniowane przez użytkownika jak podano tutaj => https://docs.docker.com/compose/compose-file/#links


Zakładając, że chcesz dotrzeć do mysql kontener od web pojemnik Twojego docker-compose.yml plik, taki jak:

web:
  build: .
  links:
    - mysql

mysqlservice:
  image: mysql

Z przyjemnością dowiesz się, że Docker Compose już dodaje mysqlservice nazwa domeny (w web pojemnik /etc/hosts), które wskazują na mysql pojemnik.

Zamiast szukać mysql adres IP kontenera, możesz po prostu użyć mysqlservice Nazwa domeny.

Jeśli chcesz dodać niestandardowe nazwy domen, jest to również możliwe z extra_hosts parametr.


4
2017-07-01 17:52



docs.docker.com/compose/compose-file/#labels-2 linki zostaną usunięte? : -O - Junior M
dzięki @JuniorM Zaktualizowałem moją (starą) odpowiedź - Oliboy50


Jeśli chcesz wyjść z pudełka, możesz na przykład sprawdzić Kontena. Pochodzi z technologii nakładki sieciowej z Splot a ta technologia służy do tworzenia wirtualnych prywatnych sieci LAN między usługami. Dzięki temu każda usługa / kontener może być osiągnięta przez service_name.kontena.local.


3
2017-07-01 07:19



Czy to pozwoli ci połączyć się z portem odsłoniętym przez kontener od gospodarza za pomocą service_name.kontena.local? - erickson


Utwórz nową sieć pomostową inną niż docker0, uruchom swoje kontenery wewnątrz niej i możesz odwoływać się do kontenerów w tej sieci według ich nazw.

Demon Docker uruchamia wbudowany serwer DNS w celu zapewnienia automatycznej usługi   wykrywanie kontenerów podłączonych do sieci zdefiniowanych przez użytkownika. Nazwa   żądania rozdzielczości z kontenerów są obsługiwane w pierwszej kolejności przez   wbudowany serwer DNS.

Spróbuj tego:

docker network create <network name>
docker run --net <network name> --name test busybox nc -l 0.0.0.0:7000
docker run --net <network name> busybox ping test

Najpierw tworzymy nową sieć. Następnie uruchamiamy kontener busybox o nazwie test słuchanie na porcie 7000 (tylko po to, aby działało). Na koniec pingujemy kontener testowy po jego nazwie i powinno działać.


3
2017-10-19 17:28





Zmieniłem --net parametr z --network parametr i działa zgodnie z oczekiwaniami:

docker network create <network name>
docker run --network <network name> --name <container name> <other container options>
docker run --network <network name> --name <container name> <other container options>

1
2018-05-30 08:36