Docker sovrascrive il mio file /etc/resolv.conf all'interno dei contenitori


17

Voglio impostare il mio resin/rpi-raspbian:jessiecontenitore /etc/resolv.confsu:

nameserver 208.67.222.222
nameserver 208.67.220.220

Il mio Dockerfile ha la seguente riga:

ADD resolv.conf /etc/resolv.conf

Questo file aggiunto contiene i nameserver corretti.

L'host del mio Docker /etc/resolv.confcontiene le informazioni corrette.

Sto facendo funzionare il container in questo modo:

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

Nonostante tutto, il contenitore fornisce questo output:

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

È solo dopo aver modificato manualmente resolv.conf dall'interno del contenitore (o con la finestra mobile exec) che sembra giusto.

Preferirei evitare di doverlo riparare con un comando exec. Qualcuno ha idea di cosa sta succedendo qui?


Ci sono alcuni casi descritti nella loro wiki che potrebbero spiegare la tua situazione.
Julie Pelletier,

Dai un'occhiata alla mia domanda e alla risposta.
Zeinab Abbasimazar,

Risposte:


14

Per quanto ne so, finestra mobile sostituisce alcuni file in un'immagine quando è iniziato , anche se sono stati aggiunti in Dockerfile. Questo sicuramente include /etc/hosts, e molto probabilmente lo stesso accade /etc/resolv.confanche per . Apparentemente viene usato per costruire correttamente la rete "interna" predefinita di Docker (in modo che le immagini si vedano, ma non host, ecc.) Se sei veramente sicuro di voler sostituire / modificare alcuni di questi file, credo che tu debba farlo come parte delle azioni di runtime, cioè come parte della CMDlinea. Per esempio:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...

3
Questo è corretto. /etc/resolv.confviene copiato dall'host all'avvio di un contenitore.
Wisbucky,

4

Come posso vedere, stai usando una user-defined networksversione di Docker Engine> = 1.10. Quindi dalla documentazione del motore docker ufficiale su Embedded DNS server in user-defined networks:

Questi indirizzi IP --dns sono gestiti dal server DNS incorporato e non verranno aggiornati nel file /etc/resolv.conf del contenitore.

Il tuo DNS deve funzionare, ma non vedrai in alcun file di configurazione.

Riferimenti .


0

Ho risolto il problema se si tratta dell'app Web per i contenitori in Azure.

Ci sono 2 contenitori compagno . Kudu e l'host

passi

1.Installare ssh dal file docker (includere anche una configurazione sshd)

2.creare a contrapposta.sh (che aggiorna il file resolv.conf)

3.Impostare il punto di ingresso al suo interno

Ora l'host resolv.conf viene aggiornato e puoi usare qualsiasi DNS che desideri

PS: se non riesci a raccogliere il DNS personalizzato nella rete, non preoccuparti. Neanche noi potremmo. Potrebbe essere necessario ripristinare se si utilizza un ambiente ASE

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.