Compartir comentarios
Las respuestas se generan en base a la documentación.

Modo Rootless

El modo Rootless te permite ejecutar el demonio de Docker y los contenedores como un usuario no root para mitigar posibles vulnerabilidades en el demonio y en el entorno de ejecución de contenedores.

El modo Rootless no requiere privilegios de root, incluso durante la instalación del demonio de Docker, siempre que se cumplan los requisitos previos.

Cómo funciona

El modo Rootless ejecuta el demonio de Docker y los contenedores dentro de un espacio de nombres de usuario. Esto es similar al modo userns-remap, excepto que con el modo userns-remap, el propio demonio se ejecuta con privilegios de root, mientras que en el modo Rootless, tanto el demonio como el contenedor se ejecutan sin privilegios de root.

El modo Rootless no utiliza binarios con bits SETUID ni capacidades de archivo, a excepción de newuidmap y newgidmap, que son necesarios para permitir el uso de múltiples UID/GID en el espacio de nombres de usuario.

Requisitos previos

  • Debes instalar newuidmap y newgidmap en el anfitrión. Estos comandos son proporcionados por el paquete uidmap en la mayoría de las distribuciones.

  • /etc/subuid y /etc/subgid deben contener al menos 65,536 UID/GID subordinados para el usuario. En el siguiente ejemplo, el usuario testuser tiene 65,536 UID/GID subordinados (231072-296607).

$ id -u
1001
$ whoami
testuser
$ grep ^$(whoami): /etc/subuid
testuser:231072:65536
$ grep ^$(whoami): /etc/subgid
testuser:231072:65536

El script dockerd-rootless-setuptool.sh install (ver a continuación) muestra ayuda automáticamente cuando no se cumplen los requisitos previos.

Instalar

Note

Si el demonio de Docker a nivel de sistema ya se está ejecutando, considera deshabilitarlo:

$ sudo systemctl disable --now docker.service docker.socket
$ sudo rm /var/run/docker.sock

Si decides no apagar el servicio docker y el socket, deberás usar el parámetro --force en la siguiente sección. No hay problemas conocidos, pero hasta que los apagues y los deshabilites, seguirás ejecutando Docker con privilegios de root (rootful).

Si instalaste Docker 20.10 o posterior con paquetes RPM/DEB, deberías tener dockerd-rootless-setuptool.sh en /usr/bin.

Ejecuta dockerd-rootless-setuptool.sh install como usuario no root para configurar el demonio:

$ dockerd-rootless-setuptool.sh install
[INFO] Creating /home/testuser/.config/systemd/user/docker.service
...
[INFO] Installed docker.service successfully.
[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger testuser`

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Using CLI context "rootless"
Current context is now "rootless"

[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
export PATH=/usr/bin:$PATH

[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///run/user/1000/docker.sock

Si dockerd-rootless-setuptool.sh no está presente, es posible que debas instalar el paquete docker-ce-rootless-extras manualmente, por ejemplo:

$ sudo apt-get install -y docker-ce-rootless-extras

Si no tienes permisos para ejecutar gestores de paquetes como apt-get y dnf, considera utilizar el script de instalación disponible en https://get.docker.com/rootless. Dado que los paquetes estáticos no están disponibles para s390x, este no es compatible con s390x.

$ curl -fsSL https://get.docker.com/rootless | sh
...
[INFO] Creating /home/testuser/.config/systemd/user/docker.service
...
[INFO] Installed docker.service successfully.
[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger testuser`

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Using CLI context "rootless"
Current context is now "rootless"

[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
export PATH=/home/testuser/bin:$PATH

[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///run/user/1000/docker.sock

Los binarios se instalarán en ~/bin.

Ejecuta docker info para confirmar que el cliente docker se está conectando al demonio Rootless:

$ docker info
Client: Docker Engine - Community
 Version:    28.3.3
 Context:    rootless
...
Server:
...
 Security Options:
  seccomp
   Profile: builtin
  rootless
  cgroupns
...

Consulta la sección de Resolución de problemas si experimentas algún error.