Résolution des problèmes de permission refusée de Docker

exécution d’applications avec Docker en tant que routine quotidienne peut devenir un cauchemar lorsque vous rencontrez une erreur telle que la permission Docker refusée lors de la tentative de connexion. Mais ne vous inquiétez pas, cet article vous aidera à reprendre rapidement.

Dans ce tutoriel, vous apprendrez de nombreuses façons de résoudre le redouté message d’erreur de permission Docker refusée.

Prérequis

Ce tutoriel comprend des démonstrations pratiques. Pour suivre, assurez-vous d’avoir les éléments suivants en place:

  • Les démonstrations de ce tutoriel s’exécutent sur Ubuntu 20.04, mais d’autres distributions Linux fonctionneront également.
  • Le moteur Docker, avec le tutoriel exécutant la version 20.10.8, build 3967b7d.

Exécution de commandes Docker avec élévation de privilèges

De nombreux facteurs peuvent conduire à une erreur permission refusée lors de la connexion à Docker. L’un de ces facteurs est que vous pourriez exécuter des commandes Docker sans préfixer la commande sudo. La commande sudo est ce qui vous donne des droits administratifs élevés ainsi que des privilèges de sécurité lors de l’exécution de commandes.

Ci-dessous, vous pouvez voir la redoutée erreur permission refusée lors de la tentative d’exécution d’une commande docker.

Running into a permission denied error

Lancez votre terminal et préfixez la commande sudo à la commande docker ci-dessous pour exécuter l’image Docker hello-world. Puisque vous exécutez une commande élevée, vous devrez saisir votre mot de passe pour continuer.

sudo docker run hello-world

Vous verrez une sortie similaire à celle indiquée ci-dessous qui indique que Docker est installé correctement.

Running Elevated (sudo) Docker Commands

Redémarrage du moteur Docker

Si l’exécution de commandes Docker élevées ne résout pas l’erreur permission denied, vérifiez que votre moteur Docker est en cours d’exécution. Tout comme l’exécution d’une commande docker sans la commande sudo, un moteur Docker arrêté déclenche l’erreur permission denied. Comment résoudre l’erreur? En redémarrant votre moteur Docker.

Exécutez la commande systemctl ci-dessous pour confirmer le statut du moteur Docker (status docker) et s’il est en cours d’exécution.

sudo systemctl status docker

Ci-dessous, vous pouvez voir que le moteur Docker fonctionne à partir du statut renvoyé qui montre unctive (running).

Displaying Docker Engine status

Si le moteur Docker n’est pas actif, exécutez la commande systemctl ci-dessous pour démarrer le moteur Docker (start docker).

sudo systemctl start docker

Maintenant, exécutez la commande hello-world Docker comme vous l’avez fait dans la section « Exécution de commandes Docker surélevées » pour vérifier que l’erreur est résolue.

sudo docker run hello-world

Ajout d’un compte utilisateur à un groupe avec un accès utilisateur non root

Vous avez confirmé que votre moteur Docker fonctionne, mais vous obtenez toujours une erreur de permission refusée Docker ? Si c’est le cas, vous devez ajouter votre compte utilisateur à un groupe avec un accès utilisateur non root. Pourquoi ? Parce que toute commande Docker que vous exécutez sur une machine Linux qui n’est pas dans le groupe utilisateur déclenche une erreur de permission refusée.

  1. Exécutez la commande groupadd ci-dessous pour créer un nouveau groupe appelé docker. Entrez votre mot de passe pour continuer à exécuter la commande.
sudo groupadd docker

Si le groupe docker existe dans le groupe utilisateur, vous verrez une sortie comme celle ci-dessous.

Creating a New Group Named ‘docker’

2. Ensuite, exécutez la commande usermod ci-dessous où les options -aG indiquent à la commande d’ajouter votre compte utilisateur (programmer) au groupe (docker). Cette commande permet à votre compte utilisateur d’avoir un accès non utilisateur.

sudo usermod -aG docker programmer

3. Exécutez la commande newgrp ci-dessous pour changer l’identifiant de groupe réel actuel en docker.

Exécutez cette commande chaque fois que vous souhaitez exécuter Docker en tant qu’utilisateur non root.

sudo newgrp docker 

4. Enfin, relancez l’image Docker hello-world pour confirmer que vous ne voyez plus l’erreur. Si, à ce stade, vous continuez à obtenir une erreur, envisagez de donner plus d’accès au fichier docker.sock. Le fichier docker.sock est la prise UNIX, un moyen de communiquer des informations de processus entre l’utilisateur et le système, que le démon Docker écoute en tant que point d’entrée de l’API Docker.

Exécutez la commande chmod ci-dessous pour accorder à tous les utilisateurs un accès en lecture/écriture (666) au fichier /var/run/docker.sock. Maintenant, relancez l’image Docker hello-world pour voir si l’erreur est résolue.

sudo chmod 666 /var/run/docker.sock

Modification du fichier d’unité de service Docker

Si l’exécution de Docker en tant qu’utilisateur non root ne suffit pas à résoudre l’erreur, essayez de modifier le fichier d’unité de service Docker SystemD, un système de contrôle de service. Le fichier de service Docker contient des paramètres sensibles qui peuvent modifier le comportement du démon Docker. Vous pouvez modifier le comportement par défaut du fichier d’unité Docker en ajoutant une commande supplémentaire pour changer le comportement par défaut du service.

1. Exécutez la commande ci-dessous pour ouvrir le fichier d’unité de service Docker dans votre éditeur de texte préféré. Pour cet exemple, le fichier de service Docker s’ouvre dans l’éditeur de texte nano.

sudo nano /usr/lib/systemd/system/docker.service

2. Localisez la zone avec l’en-tête [Service] à l’intérieur du fichier d’unité de service Docker, comme indiqué ci-dessous. Copiez/collez les commandes ci-dessous dans le fichier d’unité de service Docker et enregistrez les modifications.

Ci-dessous, la commande SupplementaryGroups définit les groupes Unix supplémentaires là où les processus sont exécutés. En même temps, la commande ExecStartPost nettoie les opérations qui sont exécutées même si le service échoue à démarrer correctement.

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock
Editing the Docker Service Unit File

3. Maintenant, exécutez les commandes ci-dessous pour redémarrer et activer le service Docker. Ce faisant, vous pouvez démarrer le service Docker à nouveau pour éviter d’obtenir des erreurs lorsque vous exécutez des commandes Docker.

# Recharge tous les fichiers d'unité Docker et recrée l'arborescence de dépendance entière.
sudo systemctl daemon-reload
# Redémarre le service Docker
sudo systemctl start docker
# Activez Docker pour qu'il s'exécute sur votre ordinateur.
sudo systemctl enable docker

4. Enfin, relancez l’image Docker hello-world et vérifiez si vous obtenez toujours l’erreur de permission refusée.

Exécution de Docker en mode de privilège

Enfin, dans la liste de résolution de l’erreur de permission refusée de Docker, il y a l’exécution de Docker en mode privilégié. Ce faisant, un conteneur Docker obtient un accès root au système.

Exécuter Docker en mode privilégié est risqué et vulnérable aux attaques des pirates. Alors, soyez prudent et exécutez Docker en mode privilégié uniquement lorsque vous savez exactement ce que vous faites.

1. Exécutez la commande ci-dessous pour lister tous les conteneurs Docker sur votre système et obtenir l’ID du conteneur que vous souhaitez exécuter.

sudo docker ls -a
Listing all Docker Containers in the System

2. Ensuite, exécutez la commande docker inspect ci-dessous pour vérifier si le conteneur que vous souhaitez exécuter est déjà en mode privilégié (--format='{{.HostConfig.Privileged}}'). Remplacez CONTAINER_ID ci-dessous par l’ID de conteneur réel que vous avez noté à l’étape un.

docker inspect --format='{{.HostConfig.Privileged}}' CONTAINER_ID

Si le conteneur est en mode privilégié, la commande renvoie une valeur true à la console. Mais si la commande renvoie une valeur fausse, comme indiqué ci-dessous, passez à l’étape suivante.

Checking if a Container is in Privileged Mode

3. Enfin, exécutez la commande docker ci-dessous pour run le conteneur Docker en mode privilégié (--privileged hello-world).

sudo docker run --privileged hello-world

Conclusion

Tout au long de ce tutoriel, vous avez appris de nombreuses façons de résoudre l’erreur de permission denied Docker, de l’exécution de commandes élevées à l’exécution de Docker en mode privilégié.

Maintenant, vous savez comment vous débarrasser d’une erreur lors de la construction d’applications alimentées par Docker ; peut-être voulez-vous aussi garder vos images Docker propres en tout temps ?

Source:
https://adamtheautomator.com/docker-permission-denied/