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.