Comment résoudre les problèmes d'autorisation pour Docker dans Ubuntu?

35

J'ai installé docker comme décrit ici . J'utilise Ubuntu Trusty 14.04 (LTS) (64 bits) . Tout lors de l'installation s'est bien passé. La commande se $ sudo docker run -i -t ubuntu /bin/bashtermine également bien (après avoir tapé "exit" dans la console ouverte. Mais lorsque j'essaie de faire autre chose, j'obtiens "autorisation refusée". Par exemple:

`$ sudo docker run -d -P training/webapp python app.py`

Réutilisé dans Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Réutilisé dans Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

Comment résoudre ça? J'ai cherché sur Google le problème mais je ne trouve pas de solution à mon cas.

Cerise
la source

Réponses:

50

Ajoutez le groupe de dockers s'il n'existe pas déjà.

$ sudo groupadd docker

Ajoutez l'utilisateur connecté ${USER}au groupe Docker. Modifiez le nom d'utilisateur pour qu'il corresponde à votre utilisateur préféré.

$ sudo gpasswd -a ${USER} docker

Redémarrez le démon Docker:

$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd

Vous devez vous déconnecter et vous reconnecter pour mettre à jour les autorisations de groupe. Pour éviter cela, vous pouvez basculer vers un sous-shell comme suit. Ou utilisez l'une des autres astuces mentionnées dans cette question :

su - $USER
pyprisme
la source
14
J'ai dû redémarrer pour que cela prenne effet.
obsolète
8
Pas besoin de redémarrer, il suffit de se déconnecter et de se connecter.
Ajay Gautam
2
La déconnexion l'a fait, même lorsqu'il exec $SHELLne l'a pas fait. Je suis intéressé de savoir par quel mécanisme la déconnexion a résolu le problème. Ce ne sont pas des fenêtres!
Dark Egregious
1
Dans Fedora, vous devez d'abord éditer /etc/selinux/configet mettre SELINUX=disabled, puis redémarrer Linux
Junior M
1
Grande explication! Tu es le meilleur! :)
Francis Rodrigues
5

Si vous utilisez CentOS ou RedHat, vous devrez peut-être d'abord désactiver SELinux en exécutant:

setenforce 0

Redémarrez ensuite pour réactiver SELinux ou exécuter setenforce 1.

joelschmid
la source
4

J'ai eu le même problème, à cause de selinux. Vous pouvez vérifier si selinux est le coupable en:

  1. Désactiver selinux: setenforce 0
  2. Nouvelle tentative

Si la désactivation de selinux a résolu votre problème, ce n'est pas une raison pour le laisser désactivé:

  1. Activer selinux: setenforce 1
  2. Autorisez la connexion socket dans la configuration selinux: setsebool docker_connect_any true
  3. Exécutez votre conteneur Docker avec l' --priviledgedoption
Paul Podgorsek
la source
3

Je suppose que votre nom d'utilisateur est déjà dans le groupe Docker. Pour vérifier cela, lancez la commande ci-dessous.

id -nG

Sinon, vous devez ajouter votre utilisateur au groupe de menus en utilisant la commande ci-dessous.

sudo groupadd docker
sudo usermod -aG docker $USER

Lorsque vous exécutez la commande, sudo systemctl start dockerun processus de menu fixe est créé. Ce processus de menu fixe contient un dockerdfil de démon. La commande crée également un docker.socksocket Unix par défaut . Le docker.socksocket est continuellement écouté par le dockerdthread du démon. Cela vous permet de faire de l'IPC au niveau du noyau avec un docker.pidprocessus. Pour pouvoir utiliser cette prise de menu fixe, vous devez disposer des autorisations appropriées à partir du niveau processus ( docker.pid) et du niveau fichier ( docker.sock). Donc, exécuter ci-dessous deux commandes devrait résoudre votre problème. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid

Uddhav Gautam
la source
1

Par version actuelle, nous n'avons pas besoin d'ajouter le groupe docker.
Il existe automatiquement par l'installation. Vous pouvez vérifier en utilisant la commande:

$ sudo groupadd docker
groupadd: group 'docker' already exists

Donc, pour gérer Docker en tant qu'utilisateur non root , ajoutez simplement votre utilisateur au groupe Docker, puis déconnectez-vous et reconnectez-vous pour que votre appartenance à un groupe soit réévaluée:

$ sudo usermod -aG docker $USER
$ logout

Pour le vérifier lorsque vous vous reconnectez

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

Vous pouvez même forcer à utiliser GROUP:dockercomme nouveau groupe principal:

$ sudo chown "$USER":"docker" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
$ sudo usermod -g docker ${USER}
$ logout

Pour le vérifier lorsque vous vous reconnectez

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
Chetabahana
la source