Comment résoudre l’erreur Docker “Got permission denied while trying to connect to the Docker daemon socket” [Guide mis à jour 2026]

スポンサーリンク

Comment résoudre l’erreur Docker “Got permission denied while trying to connect to the Docker daemon socket” [Guide mis à jour 2026]

L’une des erreurs les plus fréquemment rencontrées lors des premiers pas avec Docker est “Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock”. Cet article explique en détail les causes et les solutions spécifiques pour cette erreur, mis à jour pour les environnements les plus récents de 2026. C’est une lecture indispensable pour tous les utilisateurs exécutant Docker sur Linux (Ubuntu, CentOS, Debian, etc.).

Qu’est-ce que cette erreur ? Symptômes observés

Après l’installation de Docker ou lors de l’exécution de commandes docker sur un serveur Linux, vous pourriez voir le message d’erreur suivant :

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.

Cette erreur peut survenir avec pratiquement n’importe quelle commande Docker, y compris docker ps, docker run et docker-compose up. Plus précisément, vous pourriez rencontrer les symptômes suivants :

  • docker run hello-world échoue : Le cas le plus fréquent lors de la vérification de l’installation de Docker
  • docker ps n’affiche pas les conteneurs : Impossible de voir les conteneurs en cours d’exécution à cause d’erreurs de permissions
  • docker-compose up ne démarre pas : Les applications multi-conteneurs ne parviennent pas à se lancer
  • Les pipelines CI/CD échouent : Les commandes Docker dans Jenkins, GitHub Actions, GitLab CI, etc. s’arrêtent avec des erreurs de permissions
  • L’extension Dev Containers de VS Code ne peut pas se connecter : Impossible de se connecter à Docker dans les environnements de développement à distance

Lorsque cette erreur survient, toutes les fonctionnalités de Docker deviennent inutilisables, interrompant complètement votre travail de développement. C’est particulièrement frustrant pour les utilisateurs qui découvrent Docker.

Causes de cette erreur

Cause 1 : L’utilisateur actuel n’est pas dans le groupe docker

C’est la cause la plus fréquente. Le démon Docker communique par défaut via un socket Unix (/var/run/docker.sock), et ce socket appartient à l’utilisateur root (administrateur). Les utilisateurs normaux doivent appartenir au groupe docker pour exécuter des commandes Docker. La simple installation de Docker n’ajoute pas automatiquement votre utilisateur à ce groupe, ce qui provoque des erreurs de permissions.

# Vérifier les permissions du socket
ls -la /var/run/docker.sock
# Exemple de sortie : srw-rw---- 1 root docker 0 Feb 12 10:00 /var/run/docker.sock

Cause 2 : Pas de déconnexion/reconnexion après le changement de groupe

Après avoir exécuté sudo usermod -aG docker $USER pour ajouter votre utilisateur au groupe docker, vous ne vous êtes pas déconnecté puis reconnecté. Sous Linux, les changements d’appartenance aux groupes ne prennent effet qu’au démarrage d’une nouvelle session (connexion). C’est un oubli très courant, et des questions comme “j’ai exécuté la commande mais ça ne marche toujours pas” apparaissent fréquemment sur Stack Overflow et Reddit.

Cause 3 : Le démon Docker n’est pas en cours d’exécution

Une erreur similaire peut se produire lorsque le service Docker lui-même est arrêté. Cela se produit lorsque Docker n’est pas configuré pour démarrer automatiquement après un redémarrage du serveur, ou lorsque l’installation de Docker est incomplète.

# Vérifier l'état du service Docker
sudo systemctl status docker

Cause 4 : Les permissions de /var/run/docker.sock ont été incorrectement modifiées

Cela se produit lorsque les permissions du fichier socket ont été modifiées manuellement, ou lorsque des outils de sécurité ont réinitialisé les permissions. Le socket devrait avoir les permissions srw-rw---- avec la propriété root:docker ; si les permissions sont différentes, les connexions normales échoueront.

Cause 5 : Restrictions d’accès SELinux ou AppArmor

Sur les distributions Linux à sécurité renforcée (RHEL, CentOS, Fedora, etc.), SELinux peut bloquer l’accès au socket Docker. De même, sur Ubuntu et les systèmes similaires, AppArmor peut en être la cause.

Solution 1 : Ajouter votre utilisateur au groupe docker (Recommandée)

C’est la solution la plus sûre et la plus recommandée. C’est également l’approche recommandée dans la documentation officielle de Docker.

Étape 1 : Vérifier si le groupe docker existe

D’abord, vérifiez que le groupe docker existe sur votre système. Il est normalement créé automatiquement lors de l’installation de Docker, mais il vaut mieux vérifier.

# Vérifier si le groupe docker existe
cat /etc/group | grep docker

Si le groupe n’existe pas, créez-le avec la commande suivante :

# Créer le groupe docker
sudo groupadd docker

Étape 2 : Ajouter l’utilisateur actuel au groupe docker

Utilisez la commande suivante pour ajouter l’utilisateur actuellement connecté au groupe docker :

# Ajouter l'utilisateur actuel au groupe docker
sudo usermod -aG docker $USER

Explication de la commande :
usermod : Commande pour modifier les comptes utilisateurs
-a : Mode ajout (ne supprime pas des groupes existants)
-G docker : Spécifie le groupe docker
$USER : Rempli automatiquement avec le nom d’utilisateur connecté

Pour ajouter un utilisateur spécifique, remplacez $USER par le nom d’utilisateur :

# Exemple : Ajouter un utilisateur spécifique
sudo usermod -aG docker nom_utilisateur

Étape 3 : Appliquer le changement de groupe

Méthode A : Se déconnecter et se reconnecter (la plus fiable)

# Pour les connexions SSH
exit
# Puis se reconnecter via SSH

# Pour les environnements de bureau
# Se déconnecter et se reconnecter

Méthode B : Utiliser newgrp pour un effet immédiat (terminal actuel uniquement)

# Activer immédiatement le groupe docker dans la session shell actuelle
newgrp docker

Cette méthode ne fonctionne que pour la session de terminal actuelle. Pour les nouveaux terminaux, vous devrez vous déconnecter et vous reconnecter.

Étape 4 : Vérifier la configuration

# Vérifier que vous appartenez au groupe docker
groups

# Tester que Docker fonctionne correctement
docker run hello-world

Si le message Hello from Docker! apparaît, la configuration est terminée avec succès.

Notes importantes

  • Oublier l’option -a (ajout) fera que l’utilisateur n’appartiendra “qu’au” groupe docker, le supprimant de tous les autres groupes. Utilisez toujours -aG ensemble
  • L’appartenance au groupe docker donne à cet utilisateur des privilèges équivalents à root. N’ajoutez que des utilisateurs de confiance
  • Dans les environnements WSL2 (Windows Subsystem for Linux), un redémarrage de WSL (wsl --shutdown) peut être nécessaire

Solution 2 : Utiliser sudo avec les commandes Docker

C’est une solution de contournement pour les environnements où vous ne pouvez pas modifier les paramètres de groupe, ou lorsque vous avez besoin d’utiliser Docker temporairement.

Ajoutez simplement sudo devant toutes les commandes Docker pour les exécuter avec les privilèges root :

# Exécuter les commandes Docker avec sudo
sudo docker run hello-world
sudo docker ps
sudo docker-compose up -d

Cette méthode fonctionne immédiatement mais présente les inconvénients suivants :

  • Nécessite de taper sudo à chaque fois
  • Rend l’exécution dans Docker Compose et les scripts fastidieuse
  • sudo peut ne pas être disponible dans les pipelines CI/CD
  • Les variables d’environnement et les paramètres de contexte Docker utilisent ceux de l’utilisateur root

Pour une utilisation à long terme, l’ajout de votre utilisateur au groupe docker (Solution 1) est fortement recommandé.

Pour l’utilisation de Docker Compose :

# Docker Compose
sudo docker compose up -d

# Docker Compose legacy (v1)
sudo docker-compose up -d

Solution 3 : Utiliser le mode Rootless de Docker (Avancé)

Le mode Rootless, officiellement pris en charge depuis Docker 20.10, exécute le démon Docker avec les privilèges d’un utilisateur normal. En 2026, Docker Engine 27.x a encore amélioré la stabilité, ce qui en fait l’approche recommandée pour les environnements de production soucieux de la sécurité.

Avantages du mode Rootless

  • Aucun privilège root nécessaire
  • Risques de sécurité considérablement réduits
  • Risque moindre de compromission de l’hôte depuis les conteneurs

Étapes d’installation

D’abord, installez les paquets de dépendances nécessaires :

# Ubuntu/Debian
sudo apt-get install -y uidmap dbus-user-session

# CentOS/RHEL
sudo yum install -y shadow-utils fuse-overlayfs

Ensuite, exécutez le script de configuration du mode Rootless :

# Arrêter Docker existant (rootful)
sudo systemctl disable --now docker.service docker.socket

# Installer le mode Rootless
dockerd-rootless-setuptool.sh install

Configurez les variables d’environnement :

# Ajouter à ~/.bashrc ou ~/.zshrc
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
# Appliquer les paramètres
source ~/.bashrc

# Vérifier le fonctionnement
docker run hello-world

Notes importantes

  • Le mode Rootless présente quelques limitations (liaison des ports privilégiés 80/443, certains pilotes de stockage, etc.)
  • Les images et volumes créés avec des privilèges root ne peuvent pas être utilisés directement
  • La configuration réseau peut différer du mode standard

Comment prévenir cette erreur

Prenez les mesures préventives suivantes pour éviter les erreurs de permissions Docker.

1. Configurer les paramètres de groupe immédiatement après l’installation de Docker

Complétez l’ajout au groupe docker avant d’exécuter votre première commande après l’installation de Docker. Incluez cela dans votre documentation de configuration ou vos scripts pour un processus efficace.

# Exemple de script de configuration post-installation
#!/bin/bash
sudo groupadd docker 2>/dev/null
sudo usermod -aG docker $USER
echo "Veuillez vous déconnecter et vous reconnecter"

2. Automatiser avec Ansible ou des scripts Shell

Lors de l’automatisation du développement en équipe ou de la construction de serveurs, incluez l’installation de Docker et la configuration des groupes dans vos scripts d’automatisation.

3. Vérifier les paramètres de permissions du pipeline CI/CD

Pour GitHub Actions, GitLab CI, Jenkins, etc., vérifiez au préalable que les permissions d’accès au socket Docker sont correctement configurées. De nombreuses plateformes CI/CD nécessitent des configurations spécifiques pour l’utilisation de Docker.

4. Vérifier régulièrement l’état du service Docker

# Activer le démarrage automatique de Docker
sudo systemctl enable docker

# Vérifier l'état du service Docker
sudo systemctl status docker

5. Ne jamais utiliser chmod 666

Vous pourriez trouver chmod 666 /var/run/docker.sock suggéré comme “solution” sur internet, mais c’est extrêmement dangereux du point de vue de la sécurité. Cela donne à tous les utilisateurs l’accès au démon Docker, accordant effectivement les privilèges root à tous. Ne l’utilisez jamais dans les environnements de production.

Résumé

L’erreur Docker “Got permission denied while trying to connect to the Docker daemon socket” est une erreur extrêmement courante rencontrée par pratiquement tous les utilisateurs Linux débutant avec Docker. Cependant, avec une bonne compréhension de ses causes et solutions, elle peut être résolue en quelques minutes.

Points clés :
Recommandé : Ajouter votre utilisateur au groupe docker avec sudo usermod -aG docker $USER puis se déconnecter et se reconnecter
Temporaire : Utiliser sudo docker pour l’exécution immédiate des commandes
Axé sur la sécurité : Envisager le mode Rootless de Docker

Si le problème persiste, vérifiez les éléments suivants :
1. Le service Docker est-il en cours d’exécution ? (sudo systemctl status docker)
2. Les permissions du fichier socket sont-elles correctes ? (ls -la /var/run/docker.sock)
3. Les paramètres SELinux/AppArmor interfèrent-ils ?

Si vous ne parvenez toujours pas à résoudre le problème, nous vous recommandons de poser votre question sur les forums de la communauté Docker ou Stack Overflow en précisant les détails de votre environnement (OS, version de Docker, message d’erreur complet).

Références

コメント

タイトルとURLをコピーしました