Buena noticia: la nueva versión de Docker 19.03 (actualmente experimental) podrá ejecutarse sin privilegios de root, evitando los problemas que pueden surgir al usar un usuario root. Ya no habrá necesidad de lidiar con permisos elevados, root, y cualquier cosa que pueda abrir tu máquina cuando no querías.
Video sobre esto de [DockerCon 2019] Reforzando el daemon de Docker con el modo sin privilegios de root
Algunas advertencias sobre el modo de Docker sin privilegios de root
Los ingenieros de Docker dicen que el modo sin privilegios no puede considerarse como un reemplazo para todas las funciones del motor de Docker. Algunas limitaciones del modo sin privilegios incluyen:
- los controles de recursos de cgroups, los perfiles de seguridad de apparmor, checkpoint/restore, redes superpuestas, etc. no funcionan en el modo sin privilegios.
- Exponer puertos desde los contenedores actualmente requiere un proceso helper de socat manual.
- Solo los sistemas basados en Ubuntu admiten sistemas de archivos superpuestos en modo sin privilegios de root.
- El modo sin privilegios solo se proporciona actualmente para compilaciones nocturnas que pueden no ser tan estables como estás acostumbrado.
A partir de Docker 19.3 esto es obsoleto (y más peligroso de lo necesario):
El manual de Docker tiene esto que decir al respecto:
Proporcionar acceso sin root
El daemon de Docker siempre se ejecuta como usuario root, y desde la versión 0.5.2 de Docker, el daemon de Docker se enlaza a un socket Unix en lugar de a un puerto TCP. Por defecto, ese socket Unix es propiedad del usuario root, y por lo tanto, por defecto, puedes acceder a él con sudo.
A partir de la versión 0.5.3, si tú (o tu instalador de Docker) crean un grupo Unix llamado docker y añaden usuarios a él, entonces el daemon de Docker hará que la propiedad del socket Unix sea de lectura/escritura por el grupo docker al iniciarse el daemon. El daemon de Docker siempre debe ejecutarse como usuario root, pero si ejecutas el cliente de Docker como un usuario en el grupo docker entonces no necesitas añadir sudo a todos los comandos del cliente. A partir de la versión 0.9.0, puedes especificar que un grupo distinto a docker debe ser dueño del socket Unix con la opción -G.
Advertencia: El grupo docker (o el grupo especificado con -G) es equivalente a root; ver detalles de la superficie de ataque del daemon de Docker y este blogpost sobre Por qué no permitimos que usuarios sin root ejecuten Docker en CentOS, Fedora o RHEL (gracias michael-n).
En la reciente versión del modo sin privilegios experimental en GitHub, los ingenieros mencionan que el modo sin privilegios permite ejecutar dockerd como un usuario no privilegiado, utilizando user_namespaces(7), mount_namespaces(7), network_namespaces(7).
Los usuarios deben ejecutar dockerd-rootless.sh en lugar de dockerd.
$ dockerd-rootless.sh --experimental
Dado que el modo sin privilegios es experimental, los usuarios siempre deben ejecutar dockerd-rootless.sh con --experimental.
Importante leer: pasos posteriores a la instalación para Linux (también enlaza a detalles de la superficie de ataque del daemon de Docker).
Administrar Docker como un usuario no root
El daemon de Docker se enlaza a un socket Unix en lugar de a un puerto TCP. Por defecto, este socket Unix es propiedad del usuario root y otros usuarios solo pueden acceder a él usando sudo. El daemon de Docker siempre se ejecuta como usuario root.
Si no quieres utilizar sudo cuando uses el comando de Docker, crea un grupo Unix llamado docker y añade usuarios a él. Cuando el daemon de Docker se inicia, hace que la propiedad del socket Unix sea de lectura/escritura por el grupo docker.
-
Añadir el grupo docker
si no existe:
sudo groupadd docker
-
Añadir el usuario conectado "$USER" al grupo docker
. Cambia el nombre de usuario para que coincida con tu usuario preferido si no deseas utilizar tu usuario actual:
sudo gpasswd -a $USER docker
-
Haz newgrp docker
o cierra sesión/abre sesión para activar los cambios en los grupos.
-
Puedes usar
docker run hello-world
para comprobar si puedes ejecutar Docker sin sudo
.
2 votos
No olvides activar ufw ;)
2 votos
En Ubuntu 14.04 también se encuentra el binario 'docker'. Translated to: En Ubuntu 14.04 también se encuentra el binario 'docker'.
0 votos
@anatolytechtonik También utilicé 'docker' en lugar de 'docker.io' en Ubuntu 14.04 LTS
2 votos
La instalación recomendada no es el docker en los repositorios predeterminados de Ubuntu; en su lugar, las instrucciones aquí (docs.docker.com/engine/installation/linux/ubuntulinux), recomiendan usar el repositorio de Docker. Elimina todo lo relacionado con docker existente y verifica que estás obteniendo la versión correcta desde la fuente correcta:
apt-cache policy docker-engine
(la URL de apt debe ser de dockerproject.org)3 votos
¿Qué tal un alias:? De esta manera, seguirás utilizando sudo, con protección de contraseña.
alias docker="sudo docker"
0 votos
Sí, hasta que Docker implemente policykit o algo similar, recomendaría encarecidamente usar un alias, de lo contrario, podría ser igual que ejecutar todo como root.
0 votos
Sudo chmod 666 /var/run/docker.sock
1 votos
¿Qué basura es esta que requiere permisos de root para hacer cosas simples como
docker info
? Por ejemplo,docker info
necesita acceso total a todos mis archivos, dispositivos y puertos para funcionar.