Ejecutar un comando como un usuario diferente
En este paso, aprenderás cómo ejecutar un comando dentro de un contenedor en ejecución como un usuario específico. Por defecto, docker exec
ejecuta comandos como el usuario root dentro del contenedor, pero puedes especificar un usuario diferente usando el flag -u
o --user
. Esto es importante para la seguridad y para cumplir con el principio de mínimo privilegio.
Continuemos usando el contenedor my-nginx
. Primero, veamos como qué usuario se ejecuta el comando ls /
por defecto.
docker exec my-nginx whoami
La salida probablemente será root
, ya que este es el usuario predeterminado para docker exec
.
Ahora, intentemos ejecutar un comando como un usuario diferente. La imagen de Nginx típicamente ejecuta el proceso Nginx como un usuario no root, generalmente llamado nginx
. Intentemos ejecutar el comando whoami
como el usuario nginx
.
docker exec -u nginx my-nginx whoami
Deberías ver la salida nginx
, confirmando que el comando se ejecutó como el usuario nginx
.
También puedes especificar un ID de usuario (UID) en lugar de un nombre de usuario. Para encontrar el UID del usuario nginx
dentro del contenedor, podemos consultar el archivo /etc/passwd
.
docker exec my-nginx cat /etc/passwd | grep nginx
La salida mostrará la entrada para el usuario nginx
, incluyendo su UID y GID (ID de grupo). Por ejemplo, podría verse algo como nginx:x:101:101:nginx user,,,:/nonexistent:/bin/false
. En este ejemplo, el UID es 101
.
Ahora, ejecutemos el comando whoami
usando el UID. Reemplaza 101
con el UID real que encontraste en el paso anterior si es diferente.
docker exec -u 101 my-nginx whoami
La salida debería ser nuevamente nginx
, demostrando que puedes usar tanto el nombre de usuario como el UID para especificar el usuario en docker exec
.
Ejecutar comandos como un usuario no root es una buena práctica de seguridad, especialmente cuando interactúas con archivos sensibles o realizas operaciones que no requieren privilegios de root.