Docker : résoudre l’erreur permission denied while connect to daemon socket
I. Présentation
J’ai récemment réinstallé mon laptop avec la dernière version d’Ubuntu, et après avoir réinstallé mes outils fétiches, je souhaitais tester rapidement un nouveau container qui me faisait de l'œil via docker. Je lance donc le classique « docker run container:latest », et là : c'est le drame...
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied
Bim ! Erreur dans ta face.
Il me semblait pourtant avoir tout bien fait lors de la réinstallation de docker. Mais apparemment non : j'ai dû louper quelque chose. C'est parti donc pour une séance d'investigation.
Et si vous ne faites pas attention lors de l’installation, ou si vous mettez à jour vos packages régulièrement, il y a des chances que ça vous arrive à vous aussi.
Laissez-moi vous expliquer comment régler ça.
II. Prérequis
- Une distribution Linux d’installé ou dispo sous WSL (le fameux sous-système Linux pour Windows). Personnellement, j'utilise Ubuntu 20.04 pour ce tuto.
- Docker installé
III. Un problème de droits… Manifestement
Revenons à notre erreur, plutôt explicite : il me manquerait des droits pour accéder à docker lorsque j’exécute une commande telle que docker pull ou docker run.
Alors, par où commencer ?
Et bien, lorsqu'il s'installe, docker est censé créer un groupe « docker » sur votre système Linux. Commencez par vérifier que ce groupe est bien présent :
cat /etc/group
On peut voir ici que non seulement le groupe docker est présent, mais qu'il contient également un utilisateur : thibault.
Pour vous en convaincre, j'ai créé un nouvel utilisateur "test", et l'ai ajouté au groupe docker.
Si je relance ma commande cat, on voit maintenant que mon groupe docker contient deux utilisateurs : thibault et test.
Si votre utilisateur n'est pas un membre du groupe, ajoutez-le sans attendre via la commande :
sudo usermod -aG docker <user>
Car oui, vous voulez être dans ce groupe, afin de pouvoir lancer sans sudo les commandes docker.
On va ensuite vérifier votre dossier .docker dans votre home directory, qui contient les paramètres docker, et notamment vos custom settings.
S’il est présent, vous allez le supprimer.
NOTE : pas de panique, votre dossier .docker va se recréer automatiquement. Vous perdrez cependant vos custom settings si vous en aviez : pensez donc à faire une copie de ce dossier afin de les conserver.
Bien, maintenant que ce dossier est supprimé, nous allons tester à nouveau de lancer un container, par exemple en effectuant :
docker run hello-world
Pour l'explication, on demande ici à docker de lancer un container qui s'appelle hello-world. Si l'image n'est pas présente sur notre machine, docker va alors télécharger l'image à partir du repository Docker hub.
Qu'est-ce que ce container hello-world ? Il s'agit d'un container minimaliste qui ne va faire qu'une seule chose : se démarrer et écrire "Hello world" dans votre terminal. Rien de plus. Mais c'est pratique pour tester le bon fonctionnement de docker.
Si à la suite de cette opération vous rencontrez l’erreur suivante, c’est presque fini.
WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
Il vous suffit alors de taper les commandes suivantes pour modifier les droits d’accès et le propriétaire du dossier .docker, et le tour est joué :
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R sudo chmod g+rwx "$HOME/.docker" -R
Malgré cela, votre docker est toujours récalcitrant ?
Redémarrez-le en effectuant un :
sudo systemctl restart docker
Enfin, si malgré ces opérations docker ne veut toujours rien savoir, il reste une dernière étape : changer les droits du fichier /var/run/docker.sock :
sudo chmod 666 /var/run/docker.sock
Redémarrez à nouveau docker, et profitez enfin de ce container magique qu'est hello-world :
docker run hello-world
Votre docker est maintenant fonctionnel, et vous devriez obtenir le résultat suivant :
Et voilà, investigation clôturée, coupable appréhendé.
Il ne vous reste plus qu'à tester vos containers préférés sous docker.
Bonjour,
Ce n’est vraiment pas une bonne pratique d’ajouter l’user au groupe docker, cela crée une énorme faille de sécurité et en une ligne de commande on peut l’exploiter et devenir root de la machine..
C’est vraiment à bannir, il est préférable d’utiliser sudo à chaque commande, et au passage se pencher sur podman plutôt que docker.