Docker remplace mon fichier /etc/resolv.conf à l'intérieur des conteneurs

17

Je veux régler mon resin/rpi-raspbian:jessieconteneur /etc/resolv.confsur:

nameserver 208.67.222.222
nameserver 208.67.220.220

Mon Dockerfile a la ligne suivante:

ADD resolv.conf /etc/resolv.conf

Ce fichier ajouté contient les serveurs de noms corrects.

L'hôte de mon Docker /etc/resolv.confcontient les informations correctes.

J'exécute le conteneur comme ceci:

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

Malgré tout cela, le conteneur donne cette sortie:

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

Ce n'est qu'après avoir modifié manuellement le fichier resolv.conf depuis le conteneur (ou avec Docker Exec) qu'il semble correct.

Je préfère éviter d'avoir à le réparer avec une commande exec. Quelqu'un a une idée de ce qui se passe ici?

Duncan Marshall
la source
Il y a quelques cas décrits sur leur wiki qui pourraient expliquer votre situation.
Julie Pelletier
Jetez un oeil à ma question et la réponse.
Zeinab Abbasimazar

Réponses:

14

AFAIK, docker remplace certains fichiers dans une image au démarrage , même s'ils ont été AJOUTÉS dans Dockerfile. Cela inclut à coup sûr /etc/hosts, et très probablement la même chose se produit /etc/resolv.confaussi. Ceci est apparemment utilisé pour construire correctement le réseau "interne" par défaut de Docker (pour que les images se voient, mais pas l'hôte, etc.) Si vous êtes vraiment sûr de vouloir remplacer / modifier certains de ces fichiers, je crois que vous devez faites cela dans le cadre des actions d'exécution, c'est-à-dire dans le cadre de la CMDligne. Par exemple:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...
Akavel
la source
3
C'est correct. /etc/resolv.confest copié à partir de l'hôte lors du démarrage d'un conteneur.
wisbucky
4

Comme je peux le voir, vous utilisez la user-defined networksversion du moteur Docker> = 1.10. Donc, à partir de la documentation officielle du moteur docker sur Embedded DNS server in user-defined networks:

Ces adresses IP --dns sont gérées par le serveur DNS intégré et ne seront pas mises à jour dans le fichier /etc/resolv.conf du conteneur.

Votre DNS doit fonctionner, mais vous ne le verrez dans aucun fichier de configuration.

Références .

Thiago Almeida
la source
0

J'ai résolu le problème s'il s'agit de l'application Web pour les conteneurs dans Azure.

Il y a 2 conteneurs mate . Kudu et l'hôte

Pas

1. installez le ssh à partir de votre fichier docker (incluez également une configuration sshd)

2. créer un containerstart.sh (qui met à jour le resolv.conf)

3.Définissez le point d'entrée à l'intérieur

L'hôte resolv.conf est maintenant mis à jour et vous pouvez utiliser tous les DNS que vous désirez

PS: Si vous ne pouvez pas récupérer le DNS personnalisé sur le réseau, ne vous inquiétez pas. Nous non plus. Pourrait avoir besoin de réinitialiser si vous utilisez un environnement ASE

Rıfat Erdem Sahin
la source