822 votes

Comment réparer Docker : Problème de permission refusée

J'ai installé Docker sur ma machine où j'ai le système d'exploitation Ubuntu.
Quand je cours :

sudo docker run hello-world

Tout est ok, mais je veux masquer les sudo pour rendre la commande plus courte.
Si j'écris la commande sans sudo

docker run hello-world

Cela affiche ce qui suit :

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.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.

La même chose se produit lorsque j'essaie de courir :

docker-compose up

Comment puis-je résoudre ce problème ?

1 votes

1 votes

0 votes

Ajouter un utilisateur dans le groupe docker et lui attribuer des droits

1537voto

mkb Points 2028

Si vous voulez exécuter docker en tant qu'utilisateur non-Root, vous devez l'ajouter au groupe docker.

  1. Créer le groupe docker s'il n'existe pas.

    $ sudo groupadd docker

  2. Ajoutez votre utilisateur au groupe docker.

    $ sudo usermod -aG docker $USER

  3. Exécutez la commande suivante ou déconnectez-vous et reconnectez-vous et exécutez (si cela ne fonctionne pas, vous devrez peut-être redémarrer votre machine avant)

    $ newgrp docker

  4. Vérifier si docker peut être exécuté sans Root

    $ docker run hello-world

Redémarrez si l'erreur persiste

$ reboot

Avertissement

Le groupe docker accorde des privilèges équivalents à ceux de l'utilisateur Root. Pour plus de détails sur l'impact de ces privilèges sur la sécurité de votre système, voir Surface d'attaque du démon Docker. .

Tiré de la documentation officielle de docker : manage-docker-as-a-non-Root-user

88 votes

J'ai toujours ce problème après avoir exécuté les trois étapes "(

115 votes

J'ai dû redémarrer mon ordinateur sous Ubuntu 18 pour que cela fonctionne - le simple fait de se déconnecter et de se reconnecter n'a pas fonctionné.

41 votes

@heez un redémarrage n'était peut-être pas nécessaire, redémarrer docker était suffisant pour moi. sudo systemctl restart docker

624voto

Galigator Points 2250

Après une mise à jour, j'ai eu la permission refusée. J'ai suivi les étapes de 'mkb'. étapes après l'installation Je n'ai rien changé parce que mon utilisateur était déjà dans le groupe 'docker' ; j'ai quand même réessayé deux fois sans succès.

Après une heure de recherche, la solution suivante a finalement fonctionné :

sudo chmod 666 /var/run/docker.sock

La solution est venue de Olshansk .

Il semble que la mise à jour ait recréé le socket sans les autorisations suffisantes pour le groupe 'docker'.

Problèmes

Ce dur chmod ouvre une faille de sécurité et après chaque redémarrage, cette erreur se répète et vous devez ré-exécuter la commande ci-dessus à chaque fois. Je veux une solution une fois pour toutes. Pour cela vous avez deux problèmes :

  • 1) Problème avec SystemD : La socket sera créée uniquement avec le propriétaire 'Root' et le groupe 'Root'.

    Vous pouvez vérifier ce premier problème avec cette commande :

    ls -l /lib/systemd/system/docker.socket

    Si tout cela est bon, vous devriez voir ' root/docker pas root/root '.

  • 2 ) Problème avec Login graphique : https://superuser.com/questions/1348196/why-my-linux-account-only-belongs-to-one-group

    Vous pouvez vérifier ce deuxième problème avec cette commande :

    groups

    Si tout est correct, vous devriez voir le docker dans la liste. Si ce n'est pas le cas, essayez la commande

    sudo su $USER  -c groups

    si vous voyez alors le docker groupe, c'est à cause du bug.

Solutions

Si vous parvenez à obtenir une solution de contournement pour la connexion graphique, ceci devrait faire l'affaire :

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Mais si vous ne pouvez pas gérer ce bug, une solution pas si mauvaise pourrait être la suivante :

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Cela fonctionne parce que vous êtes dans un environnement graphique et probablement le seul utilisateur de votre ordinateur. Dans les deux cas, vous avez besoin d'un reboot (ou d'un sudo chmod 666 /var/run/docker.sock )

2 votes

Si docker a été installé comme indiqué dans la documentation sur docs.docker.com/install alors vous n'aurez jamais à vous occuper de telles commandes.

5 votes

@Scott Stensland J'ai installé docker de nombreuses fois "selon la documentation". Je pense que le problème vient d'une mauvaise interaction avec un autre paquet non identifié.

1 votes

Dans docker-in-docker, je montais incorrectement /var/run/docker.sock depuis l'hôte sans l'option :ro à la fin... dès que j'ai ajouté ça, j'étais prêt à partir.

48voto

wei.liang Points 327
  1. Ajouter un groupe de dockers

    $ sudo groupadd docker

  2. Ajouter votre utilisateur actuel au groupe docker

    $ sudo usermod -aG docker $USER

  3. Changement de session vers le groupe docker

    $ newgrp - docker

  4. Exécuter un exemple pour tester

    $ docker run hello-world

0 votes

Le site newgrp La commande m'a demandé un mot de passe et n'a pas accepté mon mot de passe utilisateur. À la place, su - $USER a travaillé pour éviter de se déconnecter ou de se connecter.

36voto

Ahmed Abdullah Points 51
  1. Ajouter l'utilisateur actuel à docker groupe

    sudo usermod -aG docker $USER

  2. Changez les permissions de docker socket pour pouvoir se connecter au démon docker /var/run/docker.sock

    sudo chmod 666 /var/run/docker.sock

1 votes

Votre solution fonctionne pour ce problème : Get permission denied, merci

1 votes

Cette solution a fonctionné pour moi pour ce problème docker : La permission a été refusée lors de la tentative de connexion au socket du démon Docker à unix:///var/run/docker.sock : Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create : dial unix /var/run/docker.sock : connect : permission denied.

30voto

kumar Points 147

Je résous cette erreur avec la commande :

$ sudo chmod 666 /var/run/docker.sock

0 votes

J'utilise un serveur ubuntu 18.04 lts, j'ai utilisé cette commande, rebootet, mais j'ai toujours l'erreur :(

0 votes

Vous devrez toujours le relancer à chaque fois que vous démarrez votre machine. Si vous voulez qu'il s'exécute automatiquement au démarrage, procédez comme suit : stackoverflow.com/a/69269302/14043328

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X