# 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](#prerequisites).

## 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`](/engine/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).

```console
$ 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:
>```console
>$ 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).

**Con paquetes (RPM/DEB)**



Si instalaste Docker 20.10 o posterior con [paquetes RPM/DEB](/engine/install), deberías tener `dockerd-rootless-setuptool.sh` en `/usr/bin`.

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

```console
$ 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:

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

**Sin paquetes**



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](https://get.docker.com/rootless). Dado que los paquetes estáticos no están disponibles para `s390x`, este no es compatible con `s390x`.

```console
$ 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:
```console
$ 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](/engine/security/troubleshoot/) si experimentas algún error.
