docker exec ejecuta un proceso nuevo dentro de un contenedor que ya está en marcha. Sirve para consultar archivos, revisar una configuración o abrir una shell de diagnóstico sin detener el proceso principal.
El proceso iniciado con exec existe mientras el contenedor sigue activo y termina por separado. No reconstruye la imagen ni convierte cambios hechos a mano en una configuración permanente. Usa esta orden para inspeccionar y diagnosticar; para cambios repetibles, define la aplicación en una imagen, un volumen o Compose.
👉 Y recuerda, si quieres aprender más de Linux, visita el curso de Linux gratis.
🐳 Si quieres aprender más de Docker, visita el curso de Docker gratis.
Sintaxis de docker exec
La orden recibe primero las opciones, después el nombre o ID del contenedor y, a continuación, el ejecutable y sus argumentos:
docker exec [OPCIONES] CONTENEDOR COMANDO [ARGUMENTOS...]Explicación de las opciones
El contenedor debe estar en ejecución y no pausado. COMANDO debe ser un ejecutable que exista dentro de la imagen. Docker no interpreta automáticamente una cadena con varios comandos como si fuera una shell; para encadenarlos, ejecuta un shell disponible y pásale -c.
| Opción | Función | Cuándo usarla |
|---|---|---|
| -i | Mantiene abierta la entrada estándar del proceso. | Cuando vas a enviar entrada al proceso o abrir una sesión interactiva. |
| -t | Asigna una pseudo-terminal. | Junto con -i para una sesión de terminal; no suele hacer falta en scripts. |
| -u USUARIO[:GRUPO] | Ejecuta el proceso con otro usuario o grupo. | Cuando necesitas respetar los permisos del contenedor. Usa solo la identidad necesaria. |
| -w DIRECTORIO | Cambia el directorio de trabajo de ese proceso. | Para ejecutar una orden relativa a una carpeta concreta. |
| -e VARIABLE=VALOR | Añade o sustituye una variable de entorno para este proceso. | El valor no cambia el entorno de otros procesos del contenedor. |
| -d | Ejecuta el proceso de exec en segundo plano. | Útil para una acción puntual que no necesita entrada interactiva. |
Ejecutar un comando puntual
Este ejemplo crea un Nginx de laboratorio y comprueba su configuración dentro del contenedor. La orden de inspección termina al devolver su resultado, mientras Nginx continúa como proceso principal:
docker run -d --name web-demo nginx:alpine
docker exec web-demo nginx -tPuedes ejecutar una orden disponible en la imagen, por ejemplo listar el contenido servido por Nginx:
docker exec web-demo ls -la /usr/share/nginx/htmlLas imágenes mínimas no siempre incluyen bash, ls u otras utilidades. Si una orden no existe, revisa qué ejecutables incluye la imagen; instalar herramientas durante una sesión de diagnóstico puede ocultar el problema y no es una solución persistente.
Abrir una shell interactiva
Para trabajar manualmente dentro del contenedor, asigna entrada y terminal con -it. Muchas imágenes ligeras incluyen sh aunque no incluyan bash:
docker exec -it web-demo shEscribe exit o pulsa Ctrl+D para cerrar esa shell. Solo termina el proceso que abrió exec; el contenedor seguirá activo si su proceso principal continúa ejecutándose.
Ejecutar varios comandos y ajustar el entorno
Si necesitas una secuencia de órdenes, especifica el intérprete y pasa la secuencia con -c. El shell debe existir dentro de la imagen:
docker exec web-demo sh -c 'nginx -t && echo configuracion-valida'Una variable de entorno pasada con -e solo afecta al proceso que crea esa llamada a exec. No reconfigura el proceso principal ni los procesos que ya se están ejecutando:
docker exec -e DIAGNOSTICO=1 web-demo printenv DIAGNOSTICODiferencia entre exec y attach
exec inicia un proceso nuevo dentro del contenedor, como una shell o una herramienta de diagnóstico. attach conecta tu terminal con la entrada y salida del proceso principal existente; las teclas que envías pueden afectar a ese proceso. Para abrir una shell adicional, elige exec.
Errores comunes al usar docker exec
- El contenedor no está en ejecución: confirma su estado con docker ps -a. Si está detenido y quieres iniciarlo, usa docker start antes de exec.
- El contenedor está pausado: Docker no puede iniciar el proceso adicional hasta reanudarlo. Comprueba el estado antes de actuar.
- executable file not found: el comando o la shell no está instalado en esa imagen. Prueba solo un ejecutable que realmente exista; no des por hecho que bash está disponible.
- Se intenta encadenar comandos directamente: docker exec necesita un ejecutable. Usa sh -c o bash -c únicamente si esa shell está instalada.
- Se espera que un cambio sobreviva a la recreación: las modificaciones en la capa escribible del contenedor no cambian la imagen y pueden perderse al eliminarlo.
- Se usa -it en automatización: una pseudo-terminal no suele ser apropiada para scripts; ejecuta la orden sin terminal cuando no necesite interacción.
Lecciones relacionadas del curso Docker
- Cómo nombrar contenedores: usa un nombre estable como argumento de docker exec.
- Contenedores en modo interactivo: distingue una terminal abierta al iniciar de una sesión exec.
- Cómo leer logs de contenedores: revisa la salida del proceso principal sin abrir una shell.
- Índice del curso de Docker: consulta el recorrido completo.
Documentación oficial
Consulta la referencia oficial de docker exec para ver opciones y comportamientos de la versión instalada.

