Comment utiliser plusieurs contextes de construction Docker pour rationaliser l'assemblage d'images
Agence web » Actualités du digital » Comment résoudre les erreurs « Impossible de se connecter au démon Docker »

Comment résoudre les erreurs « Impossible de se connecter au démon Docker »

Docker 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, docker des commandes comme docker ps, docker runet docker build affichera un message d’erreur similaire à celui-ci :

$ docker run hello-world:latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
Is the docker daemon running?

Cela révèle que la CLI a tenté de communiquer avec le démon Docker en utilisant le /var/run/docker.sock Prise Unix. 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 :

$ sudo systemctl status docker
docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead)

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

Maintenant, vous devriez pouvoir courir docker Commandes CLI réussies.

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 enable docker
$ sudo systemctl daemon-reload

La daemon-reload La commande 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 du dockerd commande. Cela doit généralement être exécuté comme root.

$ sudo dockerd
INFO[2022-06-29T15:12:49.303428726+01:00] Starting up

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
Cannot connect to the Docker daemon at tcp:///0.0.0.0:2375

Dans cet exemple, le docker CLI essaie 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 :

$ docker context use default

Vous pouvez répertorier tous les contextes disponibles et les points de terminaison de démon auxquels ils se connectent avec le context ls commande:

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock

Le contexte actuellement sélectionné est mis en évidence par un astérisque.

Valeurs inattendues dans le DOCKER ENDPOINT colonne sont généralement causées par la DOCKER_HOST variable d’environnement en cours de définition. Un avertissement s’affiche lorsque c’est le cas :

$ export DOCKER_HOST=1.2.3.4
$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT
default *   Current DOCKER_HOST based configuration   tcp://1.2.3.4:2375
Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.

La présence du DOCKER_HOST La variable d’environnement dans votre shell remplace le point de terminaison défini par le contexte sélectionné. Dans cet exemple, docker les commandes cibleront toujours l’instance de démon à tcp://1.2.3.4:2375.

Ce problème peut être résolu en effaçant le DOCKER_HOST variable:

$ export DOCKER_HOST=

Docker utilisera désormais le point de terminaison configuré par votre contexte actif. Ce sera le socket Unix local par défaut à /var/run/docker.sock sauf si vous avez configuré manuellement un contexte personnalisé.

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   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
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Cela se produit lorsque votre compte d’utilisateur Unix n’est pas autorisé à interagir avec le socket qui expose l’API Docker. Vous ajouter à la docker group est le meilleur moyen de résoudre ce problème :

$ sudo usermod -aG docker $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 courir docker commandes 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.

★★★★★