Cómo arreglar la ventana acoplable: se obtuvo permiso denegado


303

Instalé Docker en mi máquina donde tengo Ubuntu OS. Después de que instalé docker, cuando ejecuto

sudo docker run hello-world

Todo está bien, pero quiero ocultar la palabra sudopara acortar el comando.

Si escribo el comando sin la palabra sudo

docker run hello-world

Eso muestra lo siguiente:

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'.

Sucedió lo mismo cuando trato de hacer

docker-compose up

¿Cómo puedo resolver esto?



Respuestas:


439

Si desea ejecutar Docker como usuario no root, debe agregarlo al grupo de Docker.

  1. Cree el grupo acoplable si no existe
$ sudo groupadd docker
  1. Agregue su usuario al grupo acoplable.
$ sudo usermod -aG docker $USER
  1. Ejecute el siguiente comando o Cerrar sesión e inicie sesión nuevamente y ejecute (eso no funciona, es posible que deba reiniciar su máquina primero)
$ newgrp docker

  1. Compruebe si Docker se puede ejecutar sin root
$ docker run hello-world

Tomado de la documentación oficial de docker: manage-docker-as-a-non-root-user


70
Todavía tengo este problema después de ejecutar los tres pasos "(
Anand

78
Tuve que reiniciar en Ubuntu 18 para que funcione, simplemente cerrar sesión y volver a iniciar sesión no funcionó.
heez

26
Es posible que no haya sido necesario reiniciar, reiniciar docker fue suficiente para mí. sudo systemctl restart docker
Sonajero

55
Tenga en cuenta que estar en el dockergrupo esencialmente otorga acceso a la raíz , sin aplicar políticas y auditorías de sudo regulares. Consulte el número 9976 de GitHub para obtener detalles y discusión.
raehik

13
Reiniciar Docker no funcionó para mí, solo reiniciarlo (Ubuntu 18.04)
Joakim Tall

360

Después de una actualización obtuve el permiso denegado. Hacer los pasos de los pasos posteriores a la instalación de 'mkb' no ha cambiado nada porque mi usuario ya estaba en el grupo 'acoplador'; Lo vuelvo a intentar dos veces sin éxito.

Después de una hora de búsqueda, la siguiente solución finalmente funcionó:

sudo chmod 666 /var/run/docker.sock

La solución vino de Olshansk .

Parece que la actualización ha recreado el socket sin permiso suficiente para el grupo 'docker'.

Problemas

Este agujero de seguridad abierto de chmod duro y después de cada reinicio, este error comienza una y otra vez y debe volver a ejecutar el comando anterior cada vez. Quiero una solución de una vez por todas. Para eso tienes dos problemas:

  • 1) Problema conSystemD : El socket se creará solo con el propietario 'root' y el grupo 'root'.

    Puede verificar este primer problema con este comando:

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

    Si todo esto es bueno, debería ver root/docker"no root/root".

  • 2) Problema con el inicio de sesión gráfico : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    Puede verificar este segundo problema con este comando:

    groups
    

    Si todo está correcto, debería ver el grupo acoplable en la lista. Si no, prueba el comando

    sudo su $USER  -c groups
    

    si ve entonces el grupo acoplable es por el error.

Soluciones

Si logra obtener una solución alternativa para el inicio de sesión gráfico, esto debería hacer el trabajo:

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

Pero si no puede manejar este error, una solución no tan mala podría ser esta:

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

Esto funciona porque usted está en un entorno gráfico y probablemente sea el único usuario en su computadora. En ambos casos necesita reiniciar (o un sudo chmod 666 /var/run/docker.sock)


2
si docker se instaló según el documento en docs.docker.com/install , nunca tendrá que lidiar con dichos comandos
Scott Stensland,

44
@ Scott Stensland He instalado docker muchas veces 'según el documento'. Creo que el problema proviene de una mala interacción con otro paquete no identificado.
Galigator

1
En docker-in-docker, estaba montando incorrectamente /var/run/docker.sock desde el host sin el :rofinal ... tan pronto como agregué que estaba listo para irme
jakebrinkmann

2
Uso ubuntu 18 en EC2 - AWS y funcionó de manera perfecta. Todos los demás (sudo usermod -aG docker $ USER y otras cosas) no funcionaron
cherah30

1
Gracias, se solucionó en Ubuntu 18.04 LTS. reafirmar y agregar a groud no lo hizo
Deepansh Parmani

32
  1. Agregar grupo acoplable
$ sudo groupadd docker
  1. Agregue su usuario actual al grupo acoplable
$ sudo usermod -aG docker $USER
  1. Cambiar sesión al grupo acoplable
$ newgrp - docker
  1. Ejecute un ejemplo para probar
$ docker run hello-world

El newgrpcomando solicitó una contraseña y no aceptó mi contraseña de usuario. En cambio su - $USERtrabajó para evitar cerrar sesión / iniciar sesión.
bluenote10

18
  1. Agregar usuario actual al dockergrupo
sudo usermod -aG docker $USER
  1. Cambie los permisos del zócalo docker para poder conectarse al demonio docker /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

Resuelvo este error con el comando:

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



2

Para solucionar ese problema, busqué dónde está instalado mi docker y docker-compose. En mi caso, dockerse instaló en /usr/bin/dockery docker-composese instaló en /usr/local/bin/docker-composeruta. Entonces, escribo esto en mi terminal:

A la ventana acoplable:

sudo chmod +x /usr/bin/docker

Para docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

Ahora no necesito escribir en mi ventana acoplable la palabra sudo

/ ************************************************* ********************** /

ERRATA:

La mejor solución para este problema fue comentada por @mkasberg. Cito el comentario:

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

¡Muchas gracias!


2
Eso podría funcionar, podría encontrarse con problemas en el futuro. Además, es una vulnerabilidad de seguridad. Sería mejor que te agregues al dockergrupo, como dicen los documentos. sudo groupadd docker, sudo usermod -aG docker $USER.
mkasberg

¡Hola @mkasberg! ¡Gracias por tu comentario! Hice una errata para citar su solución. ¡Muchas gracias!
Carlos Andres

1

lightdm y kwallet se envían con un error que parece no pasar los grupos suplementarios al iniciar sesión. Para resolver esto, también, además sudo usermod -aG docker $USER, tuve que comentar

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

a

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

en /etc/pam.d/lightdm antes de reiniciar , por la ventana acoplable grupo para realmente tener efecto.

error: https://bugs.launchpad.net/lightdm/+bug/1781418 y aquí: https://bugzilla.redhat.com/show_bug.cgi?id=1581495



1

En serio chicos. No agregue Docker en sus grupos ni modifique el zócalo posix (sin un SELinux de endurecimiento), es una forma simple de hacer una raíz privesc. Simplemente agregue un alias en su .bashrc, es más simple y seguro como: alias dc = 'sudo docker'.


1

puede seguir estos pasos y esto funcionará para usted:

  1. crear un grupo de acopladores sudo groupadd docker
  2. agrega tu usuario a este grupo sudo usermod -aG docker $USER
  3. enumere los grupos para asegurarse de que el grupo acoplable se haya creado correctamente ejecutando este comando groups
  4. ejecute el siguiente comando también para cambiar la sesión del grupo acoplable newgrp docker
  5. cambiar la propiedad del grupo para el archivo docker.socksudo chown root:docker /var/run/docker.sock
  6. cambiar la propiedad del directorio .docker sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. finalmente sudo chmod g+rwx "$HOME/.docker" -R

Después de esa prueba puedes correr docker ps -a


Quería una respuesta que no requiera reiniciar. Esta fue la única respuesta que proporcionó eso. El "truco" es chownel archivo docker.sock.
Potherca

1

Después de instalar docker, crear el grupo 'docker' y agregarle un usuario, edite el archivo de la unidad de servicio de docker:

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

Agregue dos líneas en la sección [Servicio]:

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

Guarde el archivo (Ctrl-X, y, Enter)

Ejecute y habilite el servicio Docker:

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

0

Después de la instalación de Docker en Centos. Mientras se ejecuta debajo del comando, obtuve el siguiente error.

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Cambiar grupo y permiso para docker.socket

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

Verifique usando el siguiente comando acoplable

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

-4

sudo chmod 666 /var/run/docker.sock

esto me ayudó mientras recibía un error incluso para iniciar sesión en la ventana acoplable Pero ahora esto funciona completamente bien en mi sistema.


1
Es muy inseguro usar este método. Revise las instrucciones posteriores a la instalación que se proporcionaron en los comentarios de la pregunta principal.
Alejandro Visiedo García
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.