Comment résoudre les erreurs "Impossible de se connecter au démon Docker"
Publié: 2022-08-14Docker est l'une des principales plates-formes de création et d'exécution de conteneurs de logiciels. Il est livré avec tout ce dont vous avez besoin pour utiliser des conteneurs sur un seul hôte ou sur plusieurs nœuds distribués en mode Swarm.
Docker a une architecture basée sur des démons. Le logiciel responsable de la création et du démarrage des conteneurs est indépendant du processus CLI qui accepte vos commandes. Cela signifie que vous verrez des erreurs dans la CLI si vous essayez d'exécuter des commandes sans connexion de démon active. Dans cet article, nous partagerons quelques méthodes pour résoudre ces messages frustrants.
Symptômes du problème
La CLI Docker dépend de la disponibilité d'une connexion démon. Il interagit avec le démon à l'aide d'appels d'API. Lorsque le démon configuré est inaccessible, les commandes docker
telles que docker ps
, docker run
et docker build
affichent un message d'erreur similaire à celui-ci :
$ docker run hello-world:latest Impossible de se connecter au démon Docker à unix:///var/run/docker.sock Le démon docker est-il en cours d'exécution ?
Cela révèle que la CLI a tenté de communiquer avec le démon Docker à l'aide du socket Unix /var/run/docker.sock
. Le socket n'est pas ouvert donc la connexion a échoué.
1. Vérifiez que le service Docker Daemon est en cours d'exécution
Le démon Docker est généralement géré par un service systemd qui démarre automatiquement Docker après le redémarrage de votre hôte. Vous pouvez commencer le dépannage en vérifiant si ce service est en cours d'exécution :
Docker d'état $ sudo systemctl docker.service - Moteur de conteneur d'applications Docker Chargé : chargé (/lib/systemd/system/docker.service ; activé ; préréglage du fournisseur : activé) Actif : inactif (mort)
Le service doit signaler Active: active (running)
si le démon est en cours d'exécution. L'exemple ci-dessus montre inactive (dead)
ce qui signifie que le démon s'est arrêté.
Démarrez Docker à l'aide de la commande suivante :
$ sudo systemctl start docker
Vous devriez maintenant pouvoir exécuter les commandes docker
CLI avec succès.
Vous constaterez peut-être que Docker reste à l'état arrêté après le redémarrage de votre ordinateur. Vous pouvez résoudre ce problème en activant le service, permettant à systemd de le démarrer automatiquement :
$ sudo systemctl activer le menu fixe $ sudo systemctl daemon-reload
La commande daemon-reload
demande à systemd de recharger sa configuration pour appliquer la modification.
2. Démarrez le démon manuellement
Vous pouvez parfois utiliser un système sur lequel le service Docker n'est pas installé. Vous pouvez démarrer manuellement le démon Docker à l'aide de la commande dockerd
. Cela doit généralement être exécuté en tant que root
.
$ sudo dockerd INFO[2022-06-29T15:12:49.303428726+01:00] Démarrage
Docker restera accessible tant que la commande sera en cours d'exécution. Utilisez Ctrl+C pour arrêter le démon.
3. Vérifier que la CLI cible le bon démon
Des problèmes peuvent survenir lorsque l'interface de ligne de commande tente de se connecter à une instance de démon Docker distante. C'est généralement la cause lorsque le message d'erreur affiche une adresse TCP :
$ docker run hello-world:latest Impossible de se connecter au démon Docker à tcp:///0.0.0.0:2375
Dans cet exemple, la CLI docker
tente de contacter le démon Docker à 0.0.0.0:2375
en utilisant TCP, au lieu du socket Docker Unix local. Cela échouera si la prise en charge TCP du démon Docker est désactivée ou si l'hôte spécifié est inaccessible sur le réseau.
Vous pouvez généralement résoudre ce problème en basculant vers le contexte Docker CLI correct pour la connexion démon que vous souhaitez utiliser :
$ contexte docker utiliser par défaut
Vous pouvez répertorier tous les contextes disponibles et les points de terminaison de démon auxquels ils se connectent avec la commande context ls
:
$ contexte docker ls NOM DESCRIPTION DOCKER ENDPOINT default * Configuration actuelle basée sur DOCKER_HOST unix:///var/run/docker.sock
Le contexte actuellement sélectionné est mis en évidence par un astérisque.
Les valeurs inattendues dans la colonne DOCKER ENDPOINT
sont généralement causées par la définition de la variable d'environnement DOCKER_HOST
. Un avertissement s'affiche lorsque c'est le cas :
$ exporter DOCKER_HOST=1.2.3.4 $ contexte docker ls NOM DESCRIPTION DOCKER ENDPOINT default * Configuration actuelle basée sur DOCKER_HOST tcp://1.2.3.4:2375 Avertissement : La variable d'environnement DOCKER_HOST remplace le contexte actif. Pour utiliser un contexte, définissez l'indicateur global --context ou désactivez la variable d'environnement DOCKER_HOST.
La présence de la variable d'environnement DOCKER_HOST
dans votre shell remplace le point de terminaison défini par votre contexte sélectionné. Dans cet exemple, les commandes docker
cibleront toujours l'instance de démon à tcp://1.2.3.4:2375
.
Ce problème peut être résolu en effaçant la variable DOCKER_HOST
:
$ exporter DOCKER_HOST=
Docker utilisera désormais le point de terminaison configuré par votre contexte actif. Ce sera le socket Unix local par défaut dans /var/run/docker.sock
sauf si vous avez configuré manuellement un contexte personnalisé.
$ contexte docker ls NOM DESCRIPTION DOCKER ENDPOINT default * Configuration actuelle basée sur DOCKER_HOST unix:///var/run/docker.sock
4. Problèmes d'autorisations
Des autorisations utilisateur incorrectes sur le socket de Docker sont une autre cause fréquente de problèmes de connexion au démon. Ce type de problème affiche généralement un message d'erreur légèrement différent :
$ docker run hello-world:latest Autorisation refusée lors de la tentative de connexion au socket du démon Docker à unix:///var/run/docker.sock
Cela se produit lorsque votre compte utilisateur Unix n'est pas autorisé à interagir avec le socket qui expose l'API Docker. L'ajout de vous-même au groupe docker
est la meilleure pratique pour résoudre ce problème :
$ sudo usermod -aG menu fixe $USER
Vous devrez ouvrir une nouvelle fenêtre de shell ou vous déconnecter et vous reconnecter pour que cette modification prenne effet. Vous devriez maintenant pouvoir exécuter des commandes docker
sans rencontrer de problèmes d'autorisations.
Sommaire
"Impossible de se connecter au démon Docker" s'affiche lorsque la CLI Docker ne parvient pas à communiquer avec une instance du démon Docker à l'aide de votre configuration actuelle. Cela est souvent dû au fait que le service démon Docker a été arrêté ou désactivé. Vous pouvez également essayer de vous connecter à un hôte Docker distant qui est hors ligne.
Vous devez maintenant connaître les causes possibles de ce problème et les moyens courants de le résoudre. Résolvez l'erreur en vérifiant les paramètres de votre démon Docker, en redémarrant le service Docker et en vous assurant que votre compte d'utilisateur est autorisé à interagir avec le socket de Docker.