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:

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.

Contratar 1 Hora de Soporte Técnico Especializado (30 €) →