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
newuidmapynewgidmapen el anfitrión. Estos comandos son proporcionados por el paqueteuidmapen la mayoría de las distribuciones./etc/subuidy/etc/subgiddeben contener al menos 65,536 UID/GID subordinados para el usuario. En el siguiente ejemplo, el usuariotestusertiene 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
NoteSi 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.sockSi decides no apagar el servicio
dockery el socket, deberás usar el parámetro--forceen 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.