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.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Thibault Baheux

Responsable Infrastructure IT, Geek, Manager de geeks, Je travaille au quotidien sur une infra Cloud privée / Cloud Azure, aussi bien Windows que Linux. Je me passionne pour Azure & AWS, le DevOps, la sécurité & la programmation objet (PowerShell / Python). Si je ne suis pas derrière mon clavier, vous me trouverez dans une salle de blocs ou devant un bon mur d’escalade.

thibault-baheux a publié 14 articlesVoir toutes les publications de cet auteur

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.