¿Cómo resolver los problemas de permisos para Docker en Ubuntu?

35

He instalado docker como se describe aquí . Yo uso Ubuntu Trusty 14.04 (LTS) (64 bits) . Todo durante la instalación estuvo bien. También el comando se $ sudo docker run -i -t ubuntu /bin/bashcompleta bien (después de escribir "salir" en la consola abierta. Pero cuando intento hacer otra cosa, obtengo "permiso denegado". Por ejemplo:

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

Reuslts en Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Reuslts en Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

¿Cómo resolver esto? Busqué en Google el problema pero no puedo encontrar una solución para mi caso.

Cereza
fuente

Respuestas:

50

Agregue el grupo acoplable si aún no existe.

$ sudo groupadd docker

Agregue el usuario conectado ${USER}al grupo acoplable. Cambie el nombre de usuario para que coincida con su usuario preferido.

$ sudo gpasswd -a ${USER} docker

Reinicia el demonio Docker:

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

Debe cerrar sesión e iniciar sesión nuevamente para actualizar los permisos de grupo. Para evitar eso, puede cambiar a una subshell de la siguiente manera. O use cualquiera de los otros trucos mencionados en esta pregunta :

su - $USER
pyprism
fuente
14
Tuve que reiniciar para que esto surta efecto.
obsoleto
8
No tiene que reiniciar, solo cierre la sesión e inicie sesión.
Ajay Gautam
2
Cerrar sesión lo hizo, incluso cuando exec $SHELLno lo hizo. Me interesa saber por qué mecanismo cerrar sesión resolvió el problema. ¡Esto no es windows!
Darth Egregious
1
En Fedora, primero debe editar /etc/selinux/configy poner SELINUX=disabled, luego reiniciar Linux
Junior M
1
¡Gran explicación! ¡Eres el mejor! :)
Francis Rodrigues
5

Si está ejecutando CentOS o RedHat, es posible que primero deba desactivar SELinux ejecutando:

setenforce 0

Luego reinicie para volver a habilitar SELinux o ejecutar setenforce 1.

joelschmid
fuente
4

Tuve el mismo problema, debido a selinux. Puede verificar si selinux es el culpable:

  1. Desactivar selinux: setenforce 0
  2. Reintentando

Si deshabilitar selinux resolvió su problema, no es una razón para dejarlo deshabilitado:

  1. Habilitar selinux: setenforce 1
  2. Permita la conexión del socket en la configuración de selinux: setsebool docker_connect_any true
  3. Ejecute su contenedor Docker con la --priviledgedopción
Paul Podgorsek
fuente
3

Supongo que su nombre de usuario ya está en el grupo acoplable. Para verificar esto, emita el siguiente comando.

id -nG

Si no, debe agregar su usuario al grupo de acopladores mediante el siguiente comando.

sudo groupadd docker
sudo usermod -aG docker $USER

Cuando ejecuta el comando, sudo systemctl start dockercrea un proceso acoplable. Ese proceso de docker contiene dockerdhilo de demonio. El comando también crea un docker.socksocket predeterminado de Unix. El docker.socksocket es escuchado continuamente por el dockerdhilo del demonio. Esto le permite hacer IPC a nivel de núcleo con el docker.pidproceso. Para poder utilizar este zócalo acoplable, debe tener el permiso adecuado del nivel de proceso ( docker.pid) y el nivel de archivo ( docker.sock). Entonces, ejecutar debajo de dos comandos debería resolver su problema. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid

Uddhav Gautam
fuente
1

Por versión actual no necesitamos agregar el grupo docker.
Existe automáticamente por la instalación. Puede verificar usando el comando:

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

Entonces, para administrar Docker como un usuario no root , simplemente agregue su usuario al grupo de docker, luego cierre la sesión y vuelva a iniciarla para que la membresía de su grupo sea reevaluada:

$ sudo usermod -aG docker $USER
$ logout

Para comprobarlo cuando vuelva a iniciar sesión

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

Incluso puede forzar a usar GROUP:dockercomo su nuevo grupo primario:

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

Para comprobarlo cuando vuelva a iniciar sesión

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