Docker przesłania mój plik /etc/resolv.conf w kontenerach

17

Chcę ustawić mój resin/rpi-raspbian:jessiekontener /etc/resolv.confna:

nameserver 208.67.222.222
nameserver 208.67.220.220

Mój plik Docker ma następujący wiersz:

ADD resolv.conf /etc/resolv.conf

Ten dodany plik zawiera prawidłowe serwery nazw.

Host mojego Dockera /etc/resolv.confzawiera prawidłowe informacje.

Korzystam z kontenera w następujący sposób:

docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash

Pomimo tego wszystkiego kontener daje następujące dane wyjściowe:

root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

Dopiero po ręcznej zmianie pliku resolv.conf z poziomu kontenera (lub za pomocą exec dockera) wygląda to dobrze.

Wolałbym uniknąć konieczności naprawy za pomocą polecenia exec. Czy ktoś ma pomysł, co się tutaj dzieje?

Duncan Marshall
źródło
Na ich wiki opisano kilka przypadków, które mogłyby wyjaśnić twoją sytuację.
Julie Pelletier
Spójrz na moje pytanie i odpowiedź.
Zeinab Abbasimazar

Odpowiedzi:

14

AFAIK, okno dokowane zastępuje niektóre pliki na obrazie podczas jego uruchamiania , nawet jeśli zostały DODANE w Dockerfile. To z pewnością obejmuje /etc/hostsi najprawdopodobniej to samo dzieje się /etc/resolv.confrównież. Jest to najwyraźniej wykorzystywane do prawidłowego zbudowania domyślnej „wewnętrznej” sieci Dockera (aby obrazy się widziały, ale nie hosta itp.) Jeśli naprawdę jesteś pewien, że chcesz zastąpić / zmodyfikować niektóre z tych plików, uważam, że musisz rób to jako część działań środowiska wykonawczego, czyli jako część CMDwiersza. Na przykład:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...
akavel
źródło
3
To jest poprawne. /etc/resolv.confjest kopiowany z hosta po uruchomieniu kontenera.
wisbucky
4

Jak widzę, używasz user-defined networksi Docker Engine wersja> = 1.10. Więc z oficjalnej dokumentacji silnika dokera o Embedded DNS server in user-defined networks:

Te adresy IP --dns są zarządzane przez wbudowany serwer DNS i nie będą aktualizowane w pliku /etc/resolv.conf kontenera.

Twoje dns musi działać, ale nie zobaczysz w żadnym pliku konfiguracyjnym.

Odniesienia .

Thiago Almeida
źródło
0

Rozwiązałem problem, jeśli jest to aplikacja internetowa dla kontenerów na platformie Azure.

Tam są 2 kontenery . Kudu i gospodarz

Kroki

1. Zainstaluj ssh z pliku dokera (dołącz także konfigurację sshd)

2. stwórz plik containerstart.sh (który aktualizuje resolv.conf)

3. Ustaw tam punkt wejścia

Teraz host resolv.conf zostaje zaktualizowany i możesz używać dowolnych dns

PS: Jeśli nie możesz odebrać niestandardowego DNS w sieci, nie martw się. My też nie mogliśmy. Może być konieczna ponowna konfiguracja, jeśli używasz środowiska ASE

Rıfat Erdem Sahin
źródło