¿Cómo puedo usar docker sin sudo?

En las páginas de documentación de Docker, todos los comandos de ejemplo se muestran sin sudo como esta:

docker ps

En Ubuntu, el binario se llama docker.io. Tampoco funciona sin sudo:

sudo docker.io ps

¿Cómo puedo configurar Docker para que no necesite prefijar cada comando de Docker con sudo?

Buenas noticias: el nuevo docker (versión 19.03 (actualmente experimental)) podrá ejecutarse sin root, negando los problemas que pueden ocurrir al usar un usuario root. No más problemas con permisos elevados, root y cualquier cosa que pueda abrir su máquina cuando no lo desee.

Video sobre esto de [DockerCon 2019] Fortalecimiento del demonio Docker con modo Rootless

Algunas advertencias para el modo Docker sin raíces

Los ingenieros de Docker dicen que el modo rootless no puede considerarse un reemplazo para el conjunto completo de funciones de Docker Engine. Algunas limitaciones del modo rootless incluyen:

  • controles de recursos de cgroups, perfiles de seguridad de apparmor, punto de control/restauración, redes superpuestas, etc. no trabaje en modo rootless.
  • La exposición de puertos de contenedores actualmente requiere un proceso auxiliar socat manual.
  • Solo las distribuciones basadas en Ubuntu admiten sistemas de archivos superpuestos en modo rootless.
  • El modo sin raíces actualmente solo se proporciona para compilaciones nocturnas que pueden no ser tan estables como las que está acostumbrado.

A partir de docker 19.3, esto está obsoleto (y es más peligroso de lo necesario):

El manual de docker tiene esto que decir al respecto:

Dar acceso no root

El demonio de docker siempre se ejecuta como usuario root y, desde la versión 0.5.2 de Docker, el demonio de docker se vincula a un socket Unix en lugar de a un puerto TCP. De forma predeterminada, ese socket Unix es propiedad del usuario raíz, por lo que, de forma predeterminada, puede acceder a él con sudo.

A partir de la versión 0.5.3, si usted (o su instalador de Docker) crea un grupo Unix llamado docker y le agrega usuarios, el demonio de docker hará que el grupo de docker pueda leer/escribir la propiedad del socket Unix cuando se inicie el demonio. El demonio de la ventana acoplable siempre debe ejecutarse como usuario raíz, pero si ejecuta el cliente de la ventana acoplable como usuario en el grupo de la ventana acoplable, no necesita agregar sudo a todos los comandos del cliente. A partir de la versión 0.9.0, puede especificar que un grupo que no sea docker sea el propietario del socket Unix con la opción-G.

Advertencia: El grupo de la ventana acoplable (o el grupo especificado con -G) es equivalente a root; consulte Detalles de la Superficie de Ataque de Docker Daemon y esta entrada de blog en Por qué no permitimos que los usuarios que no son root ejecuten Docker en CentOS, Fedora o RHEL (gracias Michael-n).

En el reciente lanzamiento de la modo rootless experimental en GitHub, los ingenieros mencionan que el modo rootless permite ejecutar dockerd como un usuario sin privilegios, usando user_namespaces(7), mount_namespaces(7), network_namespaces (7).

Los usuarios necesitan ejecutar dockerd-rootless.sh en lugar de dockerd.

$ dockerd-rootless.sh --experimental

Como el modo Rootless es experimental, los usuarios siempre deben ejecutar dockerd-rootless.sh con-experimental.


Importante de leer: pasos posteriores a la instalación para Linux (también enlaza con Detalles de la Superficie de Ataque de Docker Daemon).

Administrar Docker como usuario no root

El demonio docker se enlaza a un socket Unix en lugar de a un puerto TCP. De forma predeterminada, ese socket Unix es propiedad del usuario root y otros usuarios solo pueden acceder a él mediante sudo. El demonio docker siempre se ejecuta como usuario root.

Si no desea usar sudo cuando use el comando docker, cree un grupo Unix llamado docker y agréguele usuarios. Cuando se inicia el demonio docker, el grupo docker puede leer/escribir la propiedad del socket Unix.


  • Agregue el grupo de docker si aún no existe:

     sudo groupadd docker
  • Agregue el usuario conectado " USER USER" al grupo de docker. Cambie el nombre de usuario para que coincida con su usuario preferido si no desea utilizar su usuario actual:

     sudo gpasswd -a $USER docker
  • Hacer un newgrp docker o cierre la sesión para activar los cambios en los grupos.

  • Puedes usar

     docker run hello-world

    para comprobar si puedes ejecutar docker sin sudo.

Para ejecutar el comando Docker sin sudo, debe agregar su usuario (que tiene privilegios de root) al grupo de docker. Para esto ejecute el siguiente comando:

 sudo usermod -aG docker $USER

Ahora, haga que el usuario cierre la sesión y luego inicie sesión nuevamente. Esta solución está bien explicada aqui con el proceso de instalación adecuado.

El mecanismo por el cual se agrega un usuario al grupo docker otorga permiso para ejecutar docker para obtener acceso al socket de docker en /var/run/docker.sock. Si el sistema de archivos que contiene /var/run se ha montado con ACL habilitadas, esto también se puede lograr a través de ACL.

sudo setfacl -m user:$USER:rw /var/run/docker.sock

Solo incluyo esto para completar.

En general, recomiendo evitar las ACL siempre que haya una buena alternativa basada en grupos disponible: es mejor si los privilegios en un sistema se pueden entender mirando solo las membresías de grupo. Tener que analizar el sistema de archivos en busca de entradas de ACL para comprender los privilegios del sistema es una carga adicional para las auditorías de seguridad.

Advertencia 1: Esto tiene el mismo root equivalencia como adición $USER a la docker grupo. Aún puede iniciar un contenedor de una manera que tenga root acceso al sistema de archivos host.

Advertencia 2: Las ACL son significativamente más difíciles para las auditorías de seguridad que la seguridad basada en grupos. Probablemente evite las ACL si es posible cuando puede usar grupos en su lugar, al menos en entornos relevantes para auditorías.

Después de crear el grupo docker y agregarle mi usuario con

sudo groupadd dockersudo usermod -aG docker $USER

... Todavía tenía que dar la /var/run/docker.sock zócalo y /var/run/docker obtenga los permisos adecuados para que funcione:

sudo chown root:docker /var/run/docker.socksudo chown -R root:docker /var/run/docker

Cierre la sesión e inicie sesión nuevamente (con ese usuario), luego podrá ejecutar comandos de docker sin sudo:

docker run hello-world

Los contenedores Docker deben ser ejecutados por un usuario root. Puedes añadirte a la docker grupo (por ejemplo, corriendo sudo usermod -aG docker $USER), pero esto hace que sea fácil para cualquier persona con acceso a la $USER cuenta para obtener acceso de root a la máquina (por ejemplo, montando un volumen raíz en un contenedor con privilegios).

Una forma más consciente de la seguridad de ejecutar contenedores Docker como usuario no root sería usar Podman: https://podman.io/. Desde su página web:

Podman es un motor de contenedores sin demonios para desarrollar, administrar y ejecutar contenedores OCI en su sistema Linux. Los contenedores se pueden ejecutar como root o en modo sin raíces. En pocas palabras: alias docker=podman.

Otra alternativa es Singularity, que se implementa más comúnmente en entornos de HPC: https://sylabs.io/.

¿Qué tal un alias:? De esa manera, aún usa sudo, con protección de contraseña. alias docker= " sudo docker "

No olvides habilitar ufw :wink:

En Ubuntu 14.04 [existe] (Ubuntu – Error) también binario ‘docker’.

La instalación recomendada no es la ventana acoplable en los repositorios predeterminados de ubuntu; en su lugar, las instrucciones aquí ( Redirecting…), recomendamos usar el repositorio de docker. Elimine todas las cosas de docker existentes y verifique que está obteniendo la de la fuente correcta: 'apt-cache policy docker-engine` (la url de apt debe ser de dockerproject.org)

Lo que es basura es esto para requerir que root haga cosas simples como ‘información de la ventana acoplable’. Al igual que` docker info’, necesita acceso sin procesar a todos mis archivos, dispositivos y puertos para ejecutarse.

@anatolytechtonik También usé ‘docker’ en lugar de ‘docker.io’ en Ubuntu 14.04 LTS

Sí, hasta que Docker implemente policykit o algo similar, recomiendo encarecidamente usar un alias, de lo contrario, también podría ejecutar todo como root.

sudo chmod 666 / var / run / docker.calcetín