J'ai essayé d'exécuter Docker sur divers fichiers qui fonctionnaient auparavant et qui ne fonctionnent plus.
Dès que le fichier Docker incluait une ligne qui devait installer le logiciel, il échouait avec un message indiquant que le package n'a pas été trouvé.
RUN apt-get -y install supervisor nodejs npm
Le message commun qui apparaissait dans les journaux était
Could not resolve 'archive.ubuntu.com'
Une idée pourquoi aucun logiciel ne s'installe pas?
newgrp docker
lieu de faire une déconnexion complète, puis connectez-vous après m'être donnésudo usermod -aG docker myuserid
... c'est un cas de pointe pour bien sûr que cela arriveRéponses:
Décommentant
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
en/etc/default/docker
tant que Matt transporteur suggéré ne pas travailler pour moi. Ni mettre les serveurs DNS de ma société dans ce fichier. Mais, il y a un autre moyen (lisez la suite).Commençons par vérifier le problème:
Si la commande semble se bloquer, mais finit par cracher l'erreur "impossible de résoudre" google.com "", vous rencontrez le même problème que moi.
La
nslookup
commande interroge le serveur DNS 8.8.8.8 afin de transformer l'adresse texte de «google.com» en adresse IP. Ironiquement, 8.8.8.8 est le serveur DNS public de Google . En cas d'nslookup
échec, les serveurs DNS publics tels que 8.8.8.8 peuvent être bloqués par votre entreprise (ce que je suppose est pour des raisons de sécurité).Vous penseriez que l'ajout des serveurs DNS de votre entreprise à
DOCKER_OPTS
in/etc/default/docker
devrait faire l'affaire, mais pour une raison quelconque, cela n'a pas fonctionné pour moi. Je décris ci-dessous ce qui a fonctionné pour moi.SOLUTION :
Sur l'hôte (j'utilise Ubuntu 16.04), découvrez les adresses des serveurs DNS primaire et secondaire:
À l'aide de ces adresses, créez un fichier
/etc/docker/daemon.json
:Mettez ceci dans
/etc/docker/daemon.json
:Quitter la racine:
Maintenant, redémarrez le docker:
VÉRIFICATION :
Vérifiez maintenant que l'ajout du
/etc/docker/daemon.json
fichier vous permet de résoudre "google.com" en une adresse IP:RÉFÉRENCES :
J'ai basé ma solution sur un article de Robin Winslow, qui mérite tout le mérite de la solution. Merci Robin!
"Correction de la configuration DNS réseau de Docker." Robin Winslow. Récupéré 09/11/2016. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
la source
nslookup google.com 8.8.8.8
Dans mon cas, c'est donc j'ai cette erreurconnection timed out; no servers could be reached
/etc/default/docker
n'a pas fonctionné pour certaines personnes est (citant un commentaire du fichier)# THIS FILE DOES NOT APPLY TO SYSTEMD
Après beaucoup de maux de tête, j'ai trouvé la réponse.
Could not resolve 'archive.ubuntu.com'
peut être corrigé en apportant les modifications suivantes:Décommentez la ligne suivante dans
/etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Redémarrez le service Docker
sudo service docker restart
Supprimez toutes les images qui ont mis en cache les paramètres DNS non valides.
Le mérite revient à Andrew SB
la source
docker build --no-cache=true ...
docker build --no-cache=true -t docker-whale .
mais rien de différent ne semble s'être produit.Je rencontre le même problème, mais neiter décommenter les entrées / etc / default / docker dns ni modifier le /etc/resolv.conf dans le conteneur de construction ou le /etc/docker/daemon.json m'aide.
Mais après avoir construit avec l'option --network = host, la résolution était à nouveau correcte.
Peut-être que cela aidera quelqu'un à nouveau.
la source
Je pense que la réponse de Matt Carrier est la bonne solution à ce problème. Cependant, après la mise en œuvre, je remarquai toujours le même comportement:
could not resolve 'archive.ubuntu.com'
.Cela m'a conduit à finalement découvrir que le réseau auquel j'étais connecté bloquait le DNS public. La solution à ce problème était de configurer mon conteneur Docker pour qu'il utilise le même serveur de noms que mon hôte (la machine à partir de laquelle j'exécutais Docker).
Comment j'ai trié:
docker run -it docker/whalesay bash
ping 172.217.4.238
(Google.com)ping google.com
Dans mon cas, le premier
ping
donné lieu à des réponses, le second non.Comment j'ai réparé:
Une fois que j'ai découvert que DNS ne fonctionnait pas à l'intérieur du conteneur, j'ai vérifié que je pouvais dupliquer le même comportement sur l'hôte.
nslookup google.com
résolu très bien sur l'hôte. Mais,nslookup google.com 8.8.8.8
ounsloookup google.com 8.8.4.4
expiré.Ensuite, j'ai trouvé le (s) serveur (s) de noms que mon hôte utilisait en exécutant
nm-tool
(sur Ubuntu 14.04). Dans la veine de rétroaction rapide, j'ai commencé à nouveau l'image par exemple, et a ajouté l'adresse IP du serveur de nom au fichier resolv.conf du conteneur:sudo vi /etc/resolv.conf
. Une fois enregistré, j'ai tenté à nouveau le ping (ping google.com
) et cette fois cela a fonctionné!Veuillez noter que les modifications apportées au fichier resolv.conf du conteneur ne sont pas persistantes et seront perdues lors des redémarrages du conteneur. Dans mon cas, la solution la plus appropriée était d'ajouter l'adresse IP du serveur de noms de mon réseau au
/etc/default/docker
fichier de l'hôte .la source
nmcli device show <interfacename> | grep IP4.DNS
(Ubuntu> = 15) etnmcli dev list iface <interfacename> | grep IP4
(Ubuntu <15). Crédit: Marty Fried .Après avoir ajouté l'adresse IP DNS locale au fichier docker par défaut, cela a commencé à fonctionner pour moi ... veuillez trouver les étapes ci-dessous ...
Maintenant, allez-y et construisez le docker ... :)
la source
Pour tous ceux qui ont également ce problème, j'ai résolu mon problème en éditant le
/etc/default/docker
fichier, comme suggéré par d'autres réponses et questions. Cependant, je n'avais aucune idée de l'IP à utiliser comme DNS.Ce n'est qu'après un certain temps que j'ai compris que je devais courir
ifconfig docker
sur l'hôte pour afficher l'adresse IP de l'interface réseau du docker.C'était
172.17.0.1
dans mon cas. J'espère que cela aidera tous ceux qui ont également ce problème.la source
ifconfig docker0
J'ai trouvé cette réponse après quelques recherches sur Google. J'utilise Windows, donc certaines des réponses ci-dessus ne s'appliquent pas à mon système de fichiers.
Fondamentalement, exécutez:
Ce qui écrase juste le serveur de noms existant utilisé avec
8.8.8.8
je crois. Cela a fonctionné pour moi!Sur la base de certains commentaires, vous devrez peut-être être root. Pour ce faire, émettez
sudo -i
.la source
ssh
n'existe pas?sudo -i
une fois que vous êtesJe voulais juste ajouter une réponse tardive pour toute personne rencontrant ce problème dans les moteurs de recherche.
Ne faites PAS cela: j'avais l'habitude d'avoir une option dans / etc / default / docker à définir
iptables=false
. En effet, ufw ne fonctionnait pas (tout était ouvert même si seuls 3 ports étaient autorisés), j'ai donc suivi aveuglément la réponse à cette question: Un pare-feu non compliqué (UFW) ne bloque rien lors de l'utilisation de Docker et ce, qui était lié dans le commentairesJ'ai une très faible compréhension des règles iptables / nat / routing en général, d'où la raison pour laquelle j'aurais pu faire quelque chose d'irrationnel.
Il s'avère que je l'ai probablement mal configuré et tué la résolution DNS dans mes conteneurs. Lorsque j'ai géré un terminal à conteneurs interactif:
docker run -i -t ubuntu:14.04 /bin/bash
J'ai eu ces résultats:
La restauration de toute ma configuration ufw (before.rules), la désactivation de ufw et la suppression de iptables = false de / etc / default / docker ont restauré la fonctionnalité de résolution DNS des conteneurs.
J'ai maintenant hâte de réactiver la fonctionnalité ufw en suivant ces instructions à la place.
la source
J'ai le même problème et j'ai essayé les étapes mentionnées, mais il semble qu'aucune ne fonctionne jusqu'à l'actualisation des paramètres réseau.
Les marches:
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"
à/etc/default/docker
.iptables -t nat -F POSTROUTING
. Après avoir exécuté cela, redémarrez le docker et il initialisera la table nat avec la nouvelle plage d'adresses IP.la source
Même problème pour moi (sur Ubuntu Xenial).
docker run --dns ...
pour les conteneurs travaillés.docker build
(docker-compose etc.) n'a pas fonctionné.Après avoir analysé les journaux de docker (
journalctl -u docker.service
), si vous avez trouvé un avertissement sur une mauvaise résolution de la résolution appliquée.Suite à cela, j'ai constaté que nos serveurs de noms d'entreprise avaient été ajoutés aux interfaces réseau mais pas dans resolvconf.
Appliqué cette solution Comment configurer mon DNS statique dans les interfaces? (askubuntu) , c'est-à-dire ajouter des serveurs de noms à
/etc/resolvconf/resolv.conf.d/tail
Après la mise à jour de resolvconf (ou redémarrage).
bash docker run --rm busybox nslookup google.com
a fonctionné instantanément.
Toutes mes versions de docker-compose fonctionnent maintenant.
la source
J'ai eu le même problème aujourd'hui, je viens d'ajouter la ligne ci-dessous à / etc / default / docker
puis j'ai redémarré mon ordinateur portable.
Dans mon cas, le redémarrage du démon docker ne me suffit pas, je dois redémarrer mon ordinateur portable pour le faire fonctionner.
la source
Avant de passer trop de temps sur l'une des autres solutions, redémarrez simplement Docker et réessayez.
J'ai résolu le problème en utilisant Docker Desktop pour Windows sur Windows 10.
la source
J'ai également lutté pendant un certain temps avec cela maintenant, mais voici ce qui l'a résolu pour moi
Ubuntu 16.04 x64
. J'espère que cela fera aussi gagner du temps à quelqu'un.Dans
/etc/NetworkManager/NetworkManager.conf
: commenter#dns=dnsmasq
Créer (ou modifier)
/etc/docker/daemon.json
:sudo service docker restart
la source
Sur mon système (
macOS High Sierra 10.13.6
avecDocker 2.1.0.1
), cela était dû à un proxy d'entreprise.J'ai résolu cela en deux étapes:
Preferences>Proxies
Ajoutez les mêmes paramètres à votre config.json à l'intérieur
~/.docker/config.json
comme:la source