En esta lección aprenderás instrucción USER Dockerfile, una pieza importante para que tus contenedores no ejecuten la aplicación como root salvo que sea estrictamente necesario.
USER cambia el usuario activo para las instrucciones siguientes y para el proceso principal del contenedor, por eso conviene entenderla antes de llevar imágenes a entornos reales.
👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis
🐳 Si quieres aprender más de Docker, pincha en este curso de Docker gratis
Qué hace la instrucción USER Dockerfile
Problema: muchas imágenes ejecutan comandos como root por defecto. Eso puede simplificar el build, pero aumenta el impacto si la aplicación tiene una vulnerabilidad.
Qué aporta Docker: USER permite cambiar a un usuario concreto dentro de la imagen para ejecutar RUN, CMD o ENTRYPOINT con menos privilegios.
| Situación | Recomendación |
|---|---|
| Durante el build | Crea usuario, grupo y permisos antes de cambiar a USER. |
| Aplicación final | Ejecuta el proceso con un usuario no root cuando sea posible. |
| Archivos copiados | Asegura ownership/permisos antes de arrancar la app. |
Ejemplo práctico
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --omit=dev
COPY . .
RUN addgroup -S app && adduser -S app -G app \
&& chown -R app:app /app
USER app
CMD ["node", "server.js"]docker build -t user-demo:1.0 .
docker run --rm user-demo:1.0 idEl ejemplo crea un usuario de aplicación, ajusta permisos sobre /app y cambia a USER app antes del CMD. Así el proceso principal no arranca como root.
Errores comunes
- Cambiar a USER antes de preparar permisos: después pueden fallar COPY, RUN o escrituras necesarias.
- Asumir que USER arregla toda la seguridad: reduce privilegios, pero no sustituye buenas prácticas de imagen, red y secretos.
- Usar nombres de usuario inexistentes: crea el usuario antes o usa UID/GID válidos.
- Dar permisos 777 para salir del paso: suele esconder problemas y abre demasiado acceso.
Advertencia: ejecutar como no root es una defensa importante, pero prueba que la aplicación puede leer, escribir y escuchar donde corresponde. Si necesita privilegios extra, documenta el motivo.
Lecciones relacionadas del curso Docker
- Instrucción WORKDIR Dockerfile
- Instrucción RUN Dockerfile
- Instrucción CMD
- Cómo crear un usuario dentro del contenedor
- Buenas prácticas Dockerfile
Documentación oficial y recursos
La instrucción USER Dockerfile queda bien aplicada cuando el contenedor arranca con los mínimos privilegios necesarios y los permisos están preparados de forma explícita.
En producción, este cambio debe ir acompañado de pruebas reales de lectura, escritura, puertos y comportamiento de la aplicación.
