web-dev-qa-db-fra.com

Comment résoudre les problèmes d'autorisation pour le menu fixe à Ubuntu?

J'ai installé le menu fixe comme décrit ici . J'utilise Ubuntu Trusty 14.04 (LTS) (64 bits) . Tout s'est bien passé lors de l'installation. De plus, la commande $ Sudo docker run -i -t ubuntu /bin/bash se termine bien (après avoir tapé "exit" dans la console ouverte. Mais lorsque j'essaie de faire autre chose, je reçois une "permission refusée". Par exemple:

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

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

` docker info`

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

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

33
Cherry

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

$ Sudo groupadd docker

Ajoutez l'utilisateur connecté ${USER} au groupe de menus. Changez le nom d'utilisateur pour correspondre à 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 du groupe. Pour éviter cela, vous pouvez basculer vers un sous-shell comme suit. Ou utilisez l'une des astuces mentionnées dans cette question :

su - $USER
48
pyprism

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

setenforce 0

Eiter redémarre ensuite pour réactiver SELinux ou exécuter setenforce 1.

4
joelschmid

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

  1. Désactivation de selinux: setenforce 0
  2. Réessayer

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. Autoriser la connexion socket dans la configuration selinux: setsebool docker_connect_any true
  3. Exécutez votre conteneur Docker avec l'option --priviledged
4
Paul Podgorsek

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 docker, un processus de menu fixe est créé. Ce processus de menu fixe contient le thread dockerd daemon. La commande crée également une socket par défaut docker.sock Unix. Le socket docker.sock est écouté en permanence par le thread du démon dockerd. Cela vous permet de faire IPC au niveau du noyau avec le processus docker.pid. Pour pouvoir utiliser ce socket, vous devez disposer des autorisations appropriées au niveau processus (docker.pid) et au 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

3
Uddhav Gautam

Par version actuelle , il n'est pas nécessaire d'ajouter le groupe docker.
Il existe automatiquement lors de 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 menu fixe puis déconnectez-vous et reconnectez-vous afin que votre appartenance au 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:docker comme 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),...
0
Chetabahana