L’erreur « permission denied while trying to connect to the Docker daemon socket » signifie que votre utilisateur n’a pas la permission d’accéder à /var/run/docker.sock. Ce guide vous montre comment corriger le problème et comprendre les implications en termes de sécurité.
Symptôme
L’exécution de n’importe quelle commande docker échoue avec :
docker ps
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.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
Ou lors de la construction ou de l’exécution de conteneurs :
docker build -t myapp:latest .
Got permission denied...
docker run -it ubuntu bash
Got permission denied...
Pourquoi ça arrive
Classé par probabilité :
- L’utilisateur n’est pas dans le groupe docker — Par défaut, seul root et les utilisateurs du groupe
dockerpeuvent accéder à la socket Docker. - Le mode Docker rootless est actif — Le daemon Docker s’exécute en tant qu’utilisateur non-root, donc l’emplacement et la propriété de la socket sont différents.
- La propriété de la socket est incorrecte —
/var/run/docker.sockest possédée par root ou un autre utilisateur, pas par votre utilisateur ou le groupe docker. - Installation Docker via Snap — Le confinement de Snap pourrait empêcher l’accès à la socket.
- **WSL2 (Windows Subsystem for Linux) — Docker Desktop pour Windows utilise un chemin de socket différent ou une méthode d’intégration différente.
- La socket a été supprimée ou recréée — Après une mise à jour système ou un redémarrage de Docker, la socket pourrait avoir les mauvaises permissions.
Correction
1. L’utilisateur n’est pas dans le groupe docker
Ajoutez votre utilisateur au groupe docker :
sudo usermod -aG docker $USER
Les flags aG signifient « ajouter aux groupes » donc vous conservez vos groupes existants.
Appliquez le changement de groupe. Choisissez une option :
Option A : Recharger l’appartenance aux groupes (cette session seulement) :
newgrp docker
Option B : Se déconnecter et se reconnecter (permanent) :
logout
# Se reconnecter
Vérifiez que ça fonctionne :
docker ps
# Devrait retourner la liste des conteneurs sans « permission denied »
Vérifiez que vous êtes dans le groupe docker :
id -G
# Devrait inclure un numéro pour le groupe « docker » (généralement 999)
groups $USER
# Devrait montrer : user : user docker ...
2. Le mode Docker rootless est actif
Docker rootless exécute le daemon en tant qu’utilisateur non-root. Vérifiez s’il est activé :
docker run --rm -it alpine cat /proc/self/cgroup | grep docker
# Si rootless, le chemin inclut /user.slice/...
Ou vérifiez l’emplacement de la socket Docker :
# Standard : /var/run/docker.sock
# Rootless : ~/.docker/run/docker.sock
ls -la /var/run/docker.sock
ls -la ~/.docker/run/docker.sock
Si vous utilisez Docker rootless, votre utilisateur devrait déjà avoir accès puisque le daemon s’exécute en tant que votre utilisateur. Vérifiez :
docker ps
Si vous obtenez une erreur de permission différente, le daemon pourrait ne pas être en cours d’exécution. Démarrez-le :
# Pour Docker rootless
dockerd-rootless-setuptool.sh install
# Ou démarrez-le manuellement
start-rootless
Pour revenir à Docker standard (avec le groupe docker) :
# Désinstaller rootless
dockerd-rootless-setuptool.sh uninstall
# Installer Docker standard
# (Suivez le guide d'installation de votre distro)
3. La propriété de la socket est incorrecte
Vérifiez qui possède la socket docker :
ls -la /var/run/docker.sock
# Résultat : srw-rw---- 1 root docker 0 Oct 26 11:00 /var/run/docker.sock
Elle devrait être possédée par root:docker avec les permissions 660. Si ce n’est pas le cas :
# Corriger la propriété
sudo chown root:docker /var/run/docker.sock
# Corriger les permissions
sudo chmod 660 /var/run/docker.sock
Vérifiez :
ls -la /var/run/docker.sock
# Affiche maintenant : srw-rw---- 1 root docker ...
docker ps
Si la socket est supprimée (par exemple, après un crash système ou une mise à jour), redémarrez Docker :
sudo systemctl restart docker
ls -la /var/run/docker.sock # Devrait réapparaître
4. Installation Docker via Snap
Le confinement de Snap peut empêcher l’accès à Docker. Vérifiez si Docker a été installé via Snap :
which docker
# Si ça affiche : /snap/bin/docker
# Alors c'est une installation Snap
Pour autoriser Snap à accéder à la socket Docker, utilisez l’interface docker :
snap connect docker:docker-daemon
Ou supprimez la version Snap et installez Docker officiellement :
snap remove docker
# Suivez l'installation officielle de Docker pour votre distro
# Par exemple, pour Ubuntu :
sudo apt-get install docker.io
# Puis ajoutez votre utilisateur au groupe docker
sudo usermod -aG docker $USER
newgrp docker
5. WSL2 (Windows Subsystem for Linux) — particularités
Sur Windows avec WSL2, Docker Desktop pour Windows utilise une intégration spéciale. Vérifiez quel Docker s’exécute :
docker version
# S'il se connecte à Docker Desktop, le contexte pourrait être « desktop-linux »
Vérifiez que Docker s’exécute :
docker ps
# Si la connexion échoue, Docker Desktop ne s'exécute pas sur Windows
Démarrez Docker Desktop (sur Windows) :
1. Ouvrez Docker Desktop depuis le menu Démarrer
2. Attendez qu’il s’initialise (généralement 30 secondes)
3. Retournez au terminal WSL2
Puis vérifiez :
docker ps
Si vous voulez utiliser Docker à l’intérieur de WSL2 (pas Docker Desktop pour Windows) :
# Installer Docker directement dans WSL2
sudo apt-get install docker.io
# Ajouter votre utilisateur au groupe docker
sudo usermod -aG docker $USER
newgrp docker
# Démarrer le daemon Docker
sudo systemctl start docker
6. La socket a été supprimée ou recréée
Si la socket a été supprimée (par exemple, /var/run est nettoyée sur certains systèmes), redémarrez Docker :
sudo systemctl restart docker
ls -la /var/run/docker.sock # Devrait réapparaître avec les bonnes permissions
Assurez-vous que la socket persiste après les redémarrages. Vérifiez l’unité systemd de Docker :
systemctl status docker
# Devrait montrer qu'elle est activée et en cours d'exécution
Activez Docker au démarrage :
sudo systemctl enable docker
Éviter la récidive
-
Ajouter les utilisateurs au groupe docker lors de la configuration :
sudo usermod -aG docker myuser -
Rendre les permissions de socket persistantes. Elles sont généralement restaurées au redémarrage de Docker, mais vous pouvez aussi les configurer dans le fichier de configuration du daemon Docker :
sudo mkdir -p /etc/docker cat <<'EOF' | sudo tee /etc/docker/daemon.json { "group": "docker" } EOF sudo systemctl restart docker -
Comprendre le risque de sécurité. Quiconque dans le groupe docker a un accès équivalent à root. Ajoutez seulement les utilisateurs de confiance.
-
Utiliser Docker rootless pour une isolation supplémentaire si vous voulez donner aux utilisateurs un accès à Docker sans privileges équivalents à root :
dockerd-rootless-setuptool.sh install -
Vérifier la propriété de la socket après les mises à jour système :
ls -la /var/run/docker.sock
Remarque de sécurité : groupe Docker = Root
Ajouter un utilisateur au groupe docker leur donne effectivement un accès root. Voici pourquoi :
# Tout membre du groupe docker peut exécuter des conteneurs en tant que root
docker run -it --rm -v /:/mnt ubuntu bash
# À l'intérieur du conteneur, /mnt pointe vers le système de fichiers de l'hôte
# Et vous exécutez en tant que root dans le conteneur
# Donc vous pouvez modifier n'importe quoi sur l'hôte
# Ou monter le système de fichiers root de l'hôte
docker run -it --rm -v /proc:/host/proc ubuntu bash
# Accéder aux processus de l'hôte et à l'état du kernel
# Ou s'échapper vers l'hôte via les volumes
docker run -it --rm -v /root/.ssh:/tmp ubuntu bash
# Accéder aux fichiers sensibles
Bonnes pratiques :
1. Ajoutez seulement les utilisateurs auxquels vous faites entièrement confiance au groupe docker.
2. Utilisez Docker rootless si vous voulez restreindre l’accès.
3. Utilisez SELinux ou les profils AppArmor pour restreindre davantage les capacités des conteneurs.
4. Sur les systèmes multi-utilisateurs, préférez un accès docker centralisé (par exemple, via un système CI/CD qui gère les permissions).
FAQ
Comment corriger l’erreur « permission refusée en essayant de se connecter à la socket du daemon Docker » ?
Ajoutez votre utilisateur au groupe docker : sudo usermod -aG docker $USER, puis déconnectez-vous et reconnectez-vous ou exécutez newgrp docker. Attention : cela donne à l’utilisateur des permissions équivalentes à root.
Que signifie « groupe docker = root » ?
Toute personne dans le groupe docker peut exécuter des conteneurs avec des privileges root. C’est équivalent à un accès sudo. Ajoutez seulement les utilisateurs de confiance au groupe docker.
Pourquoi Docker nécessite-t-il un accès root ?
Les conteneurs Docker utilisent les namespaces Linux et les cgroups, qui nécessitent root. Le mode Docker rootless (daemon non-root) existe mais n’est pas le paramètre par défaut.
Comment vérifier si mon utilisateur est dans le groupe docker ?
Exécutez groups $USER ou id -G. Si vous voyez « docker » dans la liste, vous êtes dans le groupe. Vérifiez avec docker ps (ne devrait pas demander sudo).
Comment ce guide a été vérifié
Rédigé à la main à partir de la documentation officielle, chaque commande revérifiée, puis relu une seconde fois avant publication. Dernière relecture le .
Sources officielles consultées pour cet article

