Cómo usar el comando docker container exec para ejecutar comandos en un contenedor en ejecución

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a utilizar eficazmente el comando docker container exec para ejecutar comandos dentro de un contenedor Docker en ejecución. Comenzaremos iniciando un contenedor para su ejecución, luego exploraremos cómo ejecutar un comando único en un contenedor en funcionamiento y cómo lanzar un shell interactivo para interacciones más complejas.

Además, este laboratorio cubrirá cómo personalizar el entorno de ejecución configurando variables de entorno y especificando el directorio de trabajo para el proceso exec, brindándote las habilidades necesarias para gestionar e interactuar con tus contenedores en ejecución.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555108{{"Cómo usar el comando docker container exec para ejecutar comandos en un contenedor en ejecución"}} docker/ps -.-> lab-555108{{"Cómo usar el comando docker container exec para ejecutar comandos en un contenedor en ejecución"}} docker/exec -.-> lab-555108{{"Cómo usar el comando docker container exec para ejecutar comandos en un contenedor en ejecución"}} docker/pull -.-> lab-555108{{"Cómo usar el comando docker container exec para ejecutar comandos en un contenedor en ejecución"}} end

Iniciar un contenedor para ejecución

En este paso, aprenderás cómo iniciar un contenedor Docker y ejecutar un comando dentro del mismo. Los contenedores Docker son unidades ligeras, portátiles y autosuficientes que encapsulan una aplicación y sus dependencias.

Primero, descarguemos la imagen ubuntu desde Docker Hub. Esta imagen contiene un entorno mínimo del sistema operativo Ubuntu.

docker pull ubuntu:latest

Deberías ver una salida que indica que la imagen se está descargando. Una vez completada la descarga, puedes iniciar un contenedor basado en esta imagen y ejecutar un comando simple. Usaremos el comando echo para imprimir un mensaje.

docker run ubuntu:latest echo "Hello from Docker container!"

Analicemos este comando:

  • docker run: Este es el comando para crear e iniciar un nuevo contenedor.
  • ubuntu:latest: Especifica la imagen a utilizar para el contenedor. ubuntu es el nombre de la imagen y latest es la etiqueta, que indica la versión más reciente.
  • echo "Hello from Docker container!": Este es el comando que se ejecutará dentro del contenedor.

Deberías ver la salida Hello from Docker container! impresa en tu terminal. Esto confirma que el contenedor se inició y el comando se ejecutó correctamente.

Ejecutar un comando en un contenedor en ejecución

En el paso anterior, iniciamos un contenedor y ejecutamos un comando que finalizó y luego el contenedor se cerró. En este paso, aprenderemos cómo ejecutar un comando dentro de un contenedor que ya está en ejecución. Esto es útil para inspeccionar el estado de un contenedor en funcionamiento o realizar tareas administrativas.

Primero, iniciemos un contenedor que permanecerá activo. Usaremos nuevamente la imagen ubuntu y ejecutaremos un comando que mantenga el contenedor en ejecución, como sleep infinity.

docker run -d ubuntu:latest sleep infinity

Analicemos las opciones utilizadas:

  • -d: Esta opción ejecuta el contenedor en modo desatendido (detached), lo que significa que se ejecuta en segundo plano y no bloquea tu terminal.
  • sleep infinity: Este comando dentro del contenedor lo hará dormir indefinidamente, manteniendo el contenedor en ejecución.

Ahora, obtengamos el ID del contenedor en ejecución. Puedes usar el comando docker ps para listar los contenedores activos.

docker ps

Deberías ver una salida similar a esta, mostrando tu contenedor en ejecución:

CONTAINER ID   IMAGE          COMMAND           CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu:latest   "sleep infinity"   About a minute ago   Up About a minute             <container_name>

Copia el CONTAINER ID de la salida. Ahora podemos usar el comando docker exec para ejecutar un comando dentro de este contenedor en ejecución. Reemplaza <container_id> con el ID real que copiaste.

docker exec / < container_id > ls

Este comando ejecutará ls / dentro del contenedor especificado, mostrando el contenido del directorio raíz en el sistema de archivos del contenedor. Deberías ver una lista de directorios y archivos, similar a lo que verías en un sistema Linux.

Esto demuestra cómo ejecutar un comando en un contenedor en ejecución sin detenerlo o reiniciarlo.

Ejecutar una shell interactiva en un contenedor en ejecución

En el paso anterior, ejecutamos un comando único en un contenedor en ejecución. Con frecuencia, es necesario interactuar más extensamente con un contenedor en funcionamiento, ya sea para depurar un problema o explorar su sistema de archivos. En este paso, aprenderás cómo abrir una sesión interactiva de shell dentro de un contenedor en ejecución.

Continuaremos usando el contenedor ubuntu que iniciaste en el paso anterior. Si el contenedor no está en ejecución, puedes reiniciarlo usando el comando del paso previo:

docker run -d ubuntu:latest sleep infinity

Obtén el Container ID de tu contenedor ubuntu en ejecución usando docker ps:

docker ps

Ahora, usa el comando docker exec con las opciones -it para abrir una sesión interactiva de terminal dentro del contenedor. Reemplaza <container_id> con el ID real de tu contenedor en ejecución.

docker exec -it < container_id > bash

Analicemos las nuevas opciones:

  • -i: Esta opción mantiene STDIN abierto incluso si no está conectado. Es necesario para sesiones interactivas.
  • -t: Esta opción asigna un pseudo-TTY, requerido para una sesión de shell.
  • bash: Este es el comando a ejecutar dentro del contenedor, en este caso, el shell Bash.

Después de ejecutar este comando, tu prompt de terminal debería cambiar, indicando que ahora estás dentro del shell Bash del contenedor. Ahora puedes ejecutar comandos dentro del entorno del contenedor. Por ejemplo, prueba listar los archivos en el directorio actual:

ls

Ahora estás interactuando directamente con el sistema de archivos y entorno del contenedor. Para salir del shell del contenedor y volver a la terminal de tu máquina host, simplemente escribe exit:

exit

Ahora deberías estar de vuelta en tu sesión de terminal original. Este acceso interactivo al shell es una herramienta poderosa para depurar y administrar tus contenedores.

Configurar variables de entorno para el proceso exec

En este paso, aprenderás cómo establecer variables de entorno específicamente para el comando que se ejecuta con docker exec. Esto te permite pasar configuración u otra información al proceso que se ejecuta dentro del contenedor sin modificar permanentemente el entorno del contenedor.

Continuaremos usando el contenedor ubuntu en ejecución de los pasos anteriores. Si no está en funcionamiento, inícialo con:

docker run -d ubuntu:latest sleep infinity

Obtén el Container ID de tu contenedor ubuntu en ejecución usando docker ps:

docker ps

Ahora, ejecutemos un comando dentro del contenedor y establezcamos una variable de entorno para esa ejecución específica. Usaremos el comando printenv para mostrar las variables de entorno. Reemplaza <container_id> con el ID de tu contenedor.

docker exec -e MY_VARIABLE="Hello from LabEx" MY_VARIABLE < container_id > printenv

Analicemos la nueva opción:

  • -e MY_VARIABLE="Hello from LabEx": Esta opción establece una variable de entorno llamada MY_VARIABLE con el valor "Hello from LabEx" para el comando printenv que se está ejecutando.

Deberías ver la salida Hello from LabEx impresa en tu terminal. Esto confirma que la variable de entorno se configuró correctamente para el proceso printenv.

Para demostrar que esta variable de entorno solo se establece para el proceso exec y no para el proceso principal del contenedor, ejecutemos printenv MY_VARIABLE nuevamente sin la opción -e:

docker exec MY_VARIABLE < container_id > printenv

Esta vez, no deberías ver ninguna salida, o posiblemente un error que indique que la variable no está configurada. Esto muestra que la variable de entorno solo estaba disponible para el comando ejecutado con el flag -e.

Configurar variables de entorno con docker exec -e es una forma conveniente de pasar configuración dinámica a procesos que se ejecutan dentro de tus contenedores.

Establecer el directorio de trabajo para el proceso exec

En este último paso, aprenderás cómo configurar el directorio de trabajo para el comando que se ejecuta con docker exec. Por defecto, docker exec ejecuta comandos en el directorio de trabajo configurado del contenedor (generalmente /). Puedes sobrescribir esto usando la opción -w.

Continuaremos usando el contenedor ubuntu en ejecución. Si no está funcionando, inícialo con:

docker run -d ubuntu:latest sleep infinity

Obtén el Container ID de tu contenedor ubuntu en ejecución usando docker ps:

docker ps

Ahora, ejecutemos un comando que muestre el directorio de trabajo actual dentro del contenedor. Usaremos el comando pwd. Reemplaza <container_id> con el ID de tu contenedor.

docker exec < container_id > pwd

Deberías ver / como salida, que es el directorio de trabajo predeterminado en la imagen ubuntu.

Ahora, ejecutemos nuevamente el comando pwd, pero esta vez estableceremos el directorio de trabajo en /tmp usando la opción -w.

docker exec -w /tmp < container_id > pwd

Analicemos la nueva opción:

  • -w /tmp: Esta opción establece el directorio de trabajo para el comando pwd en /tmp dentro del contenedor.

Ahora deberías ver /tmp como salida. Esto demuestra que puedes especificar un directorio de trabajo diferente para el comando ejecutado con docker exec. Esto es útil cuando necesitas ejecutar comandos que operan con archivos en una ubicación específica dentro del contenedor.

Con esto concluye el laboratorio sobre ejecución de comandos en contenedores Docker. Has aprendido cómo:

  • Iniciar contenedores para ejecución
  • Ejecutar comandos en contenedores en ejecución
  • Abrir sesiones interactivas de shell
  • Establecer variables de entorno
  • Configurar el directorio de trabajo para procesos exec

Resumen

En este laboratorio, aprendiste cómo iniciar un contenedor Docker y ejecutar comandos dentro del mismo utilizando docker run. Luego avanzaste a ejecutar comandos dentro de un contenedor ya en ejecución usando el comando docker container exec, lo cual es esencial para inspeccionar o gestionar contenedores activos.

Además, exploraste funcionalidades avanzadas de docker container exec, incluyendo:

  • Configurar variables de entorno para el proceso ejecutado
  • Especificar el directorio de trabajo

Estas capacidades proporcionan mayor control y flexibilidad al interactuar con contenedores en ejecución.