Los contenedores Docker han revolucionado la forma en que los equipos de ingeniería desarrollan, distribuyen y ejecutan aplicaciones. Al proporcionar entornos aislados, homogéneos y reproducibles, facilitan la gestión de dependencias y la portabilidad entre diferentes plataformas. Sin duda, una de las tareas operativas más habituales es saber cómo ejecutar comandos dentro de un contenedor Docker para depurar procesos, revisar logs o verificar configuraciones.
En esta guía técnica completa, exploraremos detalladamente los diferentes métodos y parámetros para ejecutar comandos dentro de un contenedor Docker, tanto de forma interactiva como automatizada mediante scripts.
Métodos principales para ejecutar comandos dentro de un contenedor Docker
La herramienta por excelencia para interactuar con contenedores en ejecución es el comando nativo docker exec. A continuación, desglosamos las cuatro casuísticas más frecuentes con ejemplos listos para copiar y ejecutar.
1. Ejecución interactiva mediante shell en Docker
La alternativa más flexible cuando necesitas explorar el sistema de archivos o ejecutar múltiples órdenes consecutivas es abrir una sesión de terminal interactiva dentro del contenedor.
Acceso con Bash o Sh en terminal
Para abrir un shell interactivo en un contenedor en ejecución (por ejemplo, denominado mi_contenedor), utiliza los modificadores -it (modo interactivo y pseudo-TTY):
docker exec -it mi_contenedor /bin/bash
Nota útil: En imágenes ultraligeras basadas en Alpine Linux donde Bash no está instalado, simplemente sustituye /bin/bash por /bin/sh.
2. Ejecución de comandos únicos sin sesión interactiva
En muchas ocasiones, solo requieres consultar el resultado puntual de una instrucción sin necesidad de abrir una terminal permanente. Esto es ideal para scripts de CI/CD o monitorización.
Ejecutar comandos puntuales y capturar salida
Para listar el contenido de un directorio específico dentro del contenedor, ejecuta directamente:
docker exec mi_contenedor ls -la /app
La salida estándar (stdout) se transmitirá de inmediato a tu terminal local, permitiéndote encadenar filtros con grep, awk o redirigir el contenido a un fichero de log local.
3. Ejecución de comandos como usuario específico
Por motivos de seguridad y control de permisos, las aplicaciones bien configuradas no deben correr como root. Sin embargo, para ciertas tareas de mantenimiento o diagnóstico, necesitas simular un usuario concreto.
El modificador -u (User) en Docker Exec
Para ejecutar una orden bajo la identidad de un usuario existente (por ejemplo, www-data o usuario1), añade el flag -u:
docker exec -u usuario1 mi_contenedor whoami
Esta opción resulta indispensable para verificar permisos de escritura sobre volúmenes montados y evitar que se creen ficheros con propietario root inaccesibles para la aplicación principal.
4. Ejecución de comandos en contenedores detenidos o cerrados
Si un contenedor ha fallado y se encuentra en estado detenido (Exited), docker exec no podrá conectarse, ya que requiere un proceso activo. En esos escenarios, dispones de dos soluciones técnicas contrastadas:
Sobrescribir el Entrypoint con Docker Run
Puedes levantar un contenedor temporal idéntico a partir de la misma imagen y montando los mismos volúmenes, pero forzando un shell:
docker run --rm -it --entrypoint /bin/sh nombre_imagen
Inspección de logs y diagnóstico forense
Antes de reiniciar el contenedor, revisa la traza exacta de error con docker logs mi_contenedor_detenido. Esto te permitirá identificar si el fallo se debió a dependencias faltantes o memoria insuficiente.
Buenas prácticas y optimización continua
Dominar la CLI de Docker es el paso preliminar para operar infraestructuras complejas. Para continuar aprendiendo y perfeccionar tu flujo de trabajo, te recomendamos consultar:
- Nuestra guía con 10 consejos esenciales para dominar Docker y optimizar tu desarrollo.
- Nuestras directrices avanzadas para desplegar Docker en producción con estabilidad y alto rendimiento.
Para consultar todas las banderas y sintaxis extendida de la herramienta, visita la documentación oficial de Docker Exec.
¿Tienes dudas o incidencias técnicas con tus contenedores Docker?
Si te encuentras con fallos en producción, problemas de conectividad entre microservicios o permisos de volúmenes, nuestro equipo de ingenieros de sistemas puede conectarse y resolverlo contigo.