2017-01-18 27 views
6

Używam kilku kontenerów na moim "serwerze Ubuntu 16.10" w "niestandardowej" sieci mostów z komponentem 2.9 (w wersji 2xlub 2.1). Większość moich kontenerów używa wewnętrznych tych samych portów, więc nie ma możliwości użycia sterownika sieciowego "host". Moje kontenery są połączeniami, korzystając z dedykowanego atrybutu links.Docker-compose container using host DNS server

Ale potrzebuję również dostępu do usług dostępnych poza moimi kontenerami. Te usługi mają dedykowany adres URL z nazwami zarejestrowanymi na serwerze DNS mojej firmy. Chociaż nie mam problemu z publicznym serwerem DNS i korzystam z usług publicznych dostępnych w moich kontenerach, po prostu nie mogę połączyć się z prywatnym serwerem DNS.

Czy znasz dobrze działające rozwiązanie do używania prywatnego DNS z kontenera? A nawet lepiej, użyj konfiguracji DNS sieci hosta?

PS: Oczywiście mogę linkować do usług mojej firmy za pomocą atrybutu extra_hosts w moich usługach w pliku docker-compose.yml. Ale ... to zdecydowanie nie jest celem posiadania DNS. Nie chcę rejestrować wszystkich moich usług w pliku YML i nie chcę go aktualizować za każdym razem, gdy adresy IP usług są aktualizowane w mojej firmie.

Kontekst:

  • Host: Ubuntu 16.10 serwer
  • Docker silnika: 1.12.6
  • Docker Compose: 1.9.0
  • doker-compose.yml: 2,1
  • Sieć: własny most.

doker-compose.yml plik (wyciąg):

version: '2.1' 
    services: 
    nexus: 
    image: sonatype/nexus3:$NEXUS_VERSION 
    container_name: nexus 
    restart: always 
    hostname: nexus.$URL 
    ports: 
     - "$NEXUS_81:8081" 
     - "$NEXUS_443:8443" 
    extra_hosts: 
     - "repos.private.network:192.168.200.200" 
    dns: 
     - 192.168.3.7 
     - 192.168.111.1 
     - 192.168.10.5 
     - 192.168.10.15 
    volumes_from: 
     - nexus-data 
    networks: 
     - pic 

    networks: 
    pic: 
     driver: bridge 
     ipam: 
     driver: default 
     config: 
      - subnet: 172.18.0.0/16 
      gateway: 172.18.0.1 

Próbowałem zi bez konfiguracji ipam dla sieci pic, bez powodzenia.

Testy & Wyniki: docker exec -ti nexus curl repos.private.network powraca poprawnie stronę HTML przemawiający za tę usługę

docker exec -ti nexus curl another-service.private.network Zwraca curl: (6) Could not resolve host: another-service.private.network; Name or service not known Podczas curl another-service.private.network od przyjmującego zwraca odpowiednią stronę HTML.

"Oczywiście" another-service.private.network jest znany na moich 4 serwerach DNS (192.168.3.7, 192.168.111.1, 192.168.10.5, 192.168.10.15).

Pozdrawiam, Olivier.

Odpowiedz

3

Nie określa się środowiska, w którym działa dokowanie, np. Mac, Windows lub Unix, więc będzie zależało od tego, jakie zmiany będą potrzebne. Nie określasz również, czy używasz domyślnej sieci mostów w oknie dokowanym w sieci mostów utworzonej przez użytkownika.

W obu przypadkach Docker domyślnie powinien próbować mapować rozdzielczość DNS z hosta Docker na swoje pojemniki.Jeśli więc Twój Docker Host może rozwiązać prywatne adresy DNS, teoretycznie twoje pojemniki również powinny być w stanie.

Zalecam przeczytanie tej oficjalnej dokumentacji DNS Docker, ponieważ jest to całkiem uzasadnione. Here dla domyślnej sieci mostka Docker, here dla sieci mostów utworzonych przez użytkownika.

Drobne wrażenie, jeśli używasz Docker na Maca, Docker Machine lub Docker dla Windows, musisz pamiętać, że Twój Docker Host jest w rzeczywistości maszyną wirtualną działającą na twoim komputerze, a nie samym fizycznym pudełkiem, więc potrzebujesz aby upewnić się, że maszyna wirtualna ma ustawione prawidłowe ustawienia rozdzielczości DNS. Konieczne będzie ponowne uruchomienie kontenerów w celu zmiany przez nich rozdzielczości DNS.

Możesz oczywiście zastąpić wszystkie domyślne ustawienia, używając docker-compose. Ma pełne możliwości jawnie ustawienie serwerów DNS, opcje wyszukiwania DNS itd Jako przykład:

version: 2 
services: 
application: 
    dns: 
    - 8.8.8.8 
    - 4.4.4.4 
    - 192.168.9.45 

znajdziesz w dokumentacji tych cech here.

+0

Witaj @Rob, dzięki za odpowiedź. Edytuję mój pierwotny wpis, aby dodać szczegóły dotyczące mojego conf (działającego na serwerze Ubuntu 16.10 z niestandardowym mostem). – Olivier