Cómo usar el comando docker container attach para interactuar con contenedores 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 el comando docker container attach para interactuar con contenedores en ejecución. Iniciarás contenedores en modo desacoplado (detached), te conectarás a ellos para observar su salida y te desconectarás utilizando la secuencia de teclas predeterminada.

También explorarás cómo conectarte a contenedores con TTY habilitado y aprenderás a sobrescribir la secuencia de teclas predeterminada para desconectarte, lo que brindará mayor flexibilidad al interactuar con tus contenedores Docker.


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/attach("Attach to Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555103{{"Cómo usar el comando docker container attach para interactuar con contenedores en ejecución"}} docker/ps -.-> lab-555103{{"Cómo usar el comando docker container attach para interactuar con contenedores en ejecución"}} docker/attach -.-> lab-555103{{"Cómo usar el comando docker container attach para interactuar con contenedores en ejecución"}} docker/pull -.-> lab-555103{{"Cómo usar el comando docker container attach para interactuar con contenedores en ejecución"}} end

Iniciar un contenedor desacoplado ejecutando un comando simple

En este paso, aprenderás cómo iniciar un contenedor Docker en modo desacoplado (detached). Cuando un contenedor se ejecuta en modo desacoplado, funciona en segundo plano y la CLI de Docker no se conecta a los flujos estándar de entrada, salida o error del contenedor. Esto es útil para ejecutar servicios o aplicaciones de larga duración.

Utilizaremos la imagen ubuntu para ejecutar un comando simple que imprime un mensaje y luego finaliza. Primero, descarguemos la imagen ubuntu para asegurarnos de que esté disponible localmente.

docker pull ubuntu

Ahora, ejecutemos un contenedor en modo desacoplado usando el comando docker run con la bandera -d. Ejecutaremos un simple comando echo que imprime "Hello from detached container!" y luego finaliza.

docker run -d ubuntu echo "Hello from detached container!"

Después de ejecutar el comando, Docker imprimirá el ID del contenedor. Esto indica que el contenedor se ha iniciado en modo desacoplado. Puedes verificar si el contenedor está en ejecución (o ha completado su tarea) usando el comando docker ps -a, que muestra todos los contenedores, incluyendo aquellos que han finalizado.

docker ps -a

Deberías ver una entrada para el contenedor que acabas de iniciar. La columna STATUS mostrará si el contenedor sigue en ejecución o ha finalizado. Dado que nuestro comando es muy breve, es probable que el contenedor ya haya finalizado cuando ejecutes docker ps -a.

Conectarse a un contenedor en ejecución y observar su salida

En el paso anterior, iniciamos un contenedor en modo desacoplado. Aunque el contenedor ejecutó un comando simple y probablemente finalizó rápidamente, aún podemos conectarnos a él para ver su salida. El comando docker attach permite conectarse a los flujos estándar de entrada, salida y error de un contenedor en ejecución o finalizado.

Primero, obtengamos el ID del contenedor que iniciamos en el paso anterior. Puedes usar el comando docker ps -a y buscar el contenedor que ejecutó el comando echo. Copia el ID del contenedor.

docker ps -a

Ahora, usa el comando docker attach seguido del ID del contenedor para conectarte a él.

docker attach <container_id>

Reemplaza <container_id> con el ID real de tu contenedor. Dado que el contenedor ejecutó un simple comando echo y finalizó, es posible que no veas ninguna salida inmediatamente, o podrías ver el mensaje "Hello from detached container!" si la salida aún está en el buffer. El comando attach te conectará a los flujos del contenedor. Como el contenedor ya completó su tarea, el comando attach probablemente finalizará inmediatamente después de conectarse.

Para demostrar cómo conectarse a un contenedor que permanece en ejecución, iniciemos un nuevo contenedor desacoplado que ejecute un comando que lo mantenga activo durante algunos segundos. Usaremos nuevamente la imagen ubuntu y ejecutaremos sleep 10.

docker run -d ubuntu sleep 10

Obtén el ID de este nuevo contenedor usando docker ps. Esta vez, el contenedor debería estar en estado Up.

docker ps

Ahora, conéctate a este contenedor en ejecución usando su ID.

docker attach <new_container_id>

Reemplaza <new_container_id> con el ID del contenedor que ejecuta sleep 10. Estarás conectado a los flujos estándar del contenedor. Dado que el comando sleep no produce salida, no verás nada. La terminal parecerá estar en espera. El contenedor se ejecutará durante 10 segundos y luego finalizará. Cuando el contenedor finalice, el comando attach también terminará, devolviéndote al prompt de tu terminal.

Desconectarse del contenedor usando la secuencia de teclas predeterminada

En el paso anterior, te conectaste a un contenedor en ejecución. Cuando estás conectado a un contenedor, estás vinculado a sus flujos estándar de entrada, salida y error. Para desconectarte del contenedor sin detenerlo, puedes usar una secuencia especial de teclas. Por defecto, esta secuencia es CTRL+p seguido de CTRL+q.

Iniciemos un nuevo contenedor desacoplado que se ejecutará por más tiempo para que puedas practicar la desconexión. Usaremos la imagen ubuntu y ejecutaremos sleep 60.

docker run -d ubuntu sleep 60

Obtén el ID de este nuevo contenedor usando docker ps.

docker ps

Ahora, conéctate a este contenedor en ejecución usando su ID.

docker attach <container_id>

Reemplaza <container_id> con el ID del contenedor que ejecuta sleep 60. Ahora estás conectado al contenedor. Para desconectarte del contenedor y volver al prompt de tu terminal sin detener el contenedor, presiona la siguiente secuencia de teclas:

  1. Presiona y mantén la tecla CTRL, luego presiona la tecla p. Suelta ambas teclas.
  2. Presiona y mantén la tecla CTRL, luego presiona la tecla q. Suelta ambas teclas.

Después de presionar CTRL+p seguido de CTRL+q, deberías volver al prompt de tu terminal. El contenedor continuará ejecutándose en segundo plano. Puedes verificar que el contenedor sigue en ejecución usando docker ps.

docker ps

Deberías ver el contenedor ejecutando sleep 60 listado con un estado de Up.

Iniciar otro contenedor desacoplado con TTY habilitado

En este paso, iniciaremos otro contenedor desacoplado, pero esta vez habilitaremos un pseudo-TTY (Terminal) para el contenedor. Habilitar un TTY suele ser necesario cuando deseas interactuar con el shell de un contenedor o ejecutar comandos que requieren una terminal.

Usaremos el comando docker run con el flag -d para modo desacoplado y el flag -t para asignar un pseudo-TTY. Ejecutaremos un comando simple que mantenga el contenedor en ejecución, como sleep 60.

docker run -d -t ubuntu sleep 60

El flag -t asigna un pseudo-TTY, que es una terminal virtual que te permite interactuar con el contenedor como si estuvieras conectado a una terminal física. Aunque el contenedor se ejecuta en modo desacoplado (-d), tener un TTY habilitado es importante para procesos interactivos o cuando planeas conectarte al contenedor más tarde y necesitas un entorno de terminal.

Después de ejecutar el comando, Docker mostrará nuevamente el ID del contenedor, indicando que el contenedor se ha iniciado en modo desacoplado con un TTY. Puedes verificar que el contenedor está en ejecución usando docker ps.

docker ps

Deberías ver el nuevo contenedor listado con un estado de Up. Toma nota del ID del contenedor, ya que lo necesitarás en el siguiente paso para conectarte a este contenedor.

Conectarse al contenedor con TTY habilitado y desconectarse usando la secuencia de teclas predeterminada

En el paso anterior, iniciamos un contenedor desacoplado con TTY habilitado. Ahora, nos conectaremos a este contenedor y practicaremos la desconexión usando la secuencia de teclas predeterminada (CTRL+p seguido de CTRL+q). Conectarse a un contenedor con TTY permite sesiones interactivas, incluso si el comando inicial no lo requiere.

Primero, obtén el ID del contenedor que iniciaste en el paso anterior que está ejecutando sleep 60 con TTY habilitado.

docker ps

Busca el ID del contenedor ubuntu que ejecuta sleep 60.

Ahora, conéctate a este contenedor usando el comando docker attach seguido del ID del contenedor.

docker attach <container_id>

Reemplaza <container_id> con el ID real de tu contenedor. Ahora estás conectado a los flujos estándar del contenedor, y como hay un TTY habilitado, tienes una interfaz similar a una terminal. Aunque el comando sleep no requiere interacción, estás conectado a la terminal virtual del contenedor.

Para desconectarte del contenedor sin detenerlo, usa la secuencia de teclas predeterminada:

  1. Presiona y mantén la tecla CTRL, luego presiona la tecla p. Suelta ambas teclas.
  2. Presiona y mantén la tecla CTRL, luego presiona la tecla q. Suelta ambas teclas.

Deberías volver al prompt de tu terminal. El contenedor continuará ejecutándose en segundo plano hasta que el comando sleep 60 finalice. Puedes verificar que el contenedor sigue en ejecución usando docker ps.

docker ps

Deberías ver el contenedor ejecutando sleep 60 listado con un estado de Up.

Conectarse a un contenedor y modificar la secuencia de teclas para desconexión

En este paso final, aprenderás cómo modificar la secuencia de teclas predeterminada para desconectarte de un contenedor. Esto puede ser útil si la secuencia predeterminada entra en conflicto con otras aplicaciones o si prefieres una combinación de teclas diferente.

Usaremos el comando docker attach con el flag --detach-keys para especificar una secuencia de teclas diferente. El formato para el flag --detach-keys es secuencia, donde secuencia es una cadena separada por comas de combinaciones de teclas. Por ejemplo, ctrl-a,ctrl-d establecería la secuencia de desconexión como CTRL+a seguido de CTRL+d.

Primero, iniciemos un nuevo contenedor desacoplado con TTY habilitado que se ejecutará por un tiempo.

docker run -d -t ubuntu sleep 60

Obtén el ID de este nuevo contenedor usando docker ps.

docker ps

Ahora, conéctate a este contenedor, pero esta vez especifica una secuencia de teclas diferente para desconectarte usando el flag --detach-keys. Usaremos ctrl-a,d como la nueva secuencia. Esto significa que presionarás CTRL+a seguido de d para desconectarte.

docker attach --detach-keys="ctrl-a,d" <container_id>

Reemplaza <container_id> con el ID real de tu contenedor. Ahora estás conectado al contenedor. Para desconectarte usando la nueva secuencia:

  1. Presiona y mantén la tecla CTRL, luego presiona la tecla a. Suelta ambas teclas.
  2. Presiona la tecla d.

Deberías volver al prompt de tu terminal. El contenedor continuará ejecutándose en segundo plano. Puedes verificar que el contenedor sigue en ejecución usando docker ps.

docker ps

Deberías ver el contenedor ejecutando sleep 60 listado con un estado de Up.

Resumen

En este laboratorio, aprendiste cómo iniciar un contenedor Docker en modo desacoplado usando el comando docker run -d, lo que permite que los contenedores se ejecuten en segundo plano sin conectarse a la terminal. Luego practicaste el uso del comando docker attach para conectarte a los flujos estándar de un contenedor en ejecución o terminado y observar su salida.

Además, exploraste cómo desconectarte de un contenedor adjunto usando la secuencia de teclas predeterminada (CTRL+p CTRL+q) y cómo cambia el comportamiento de docker attach cuando el contenedor se inicia con TTY habilitado (-t). Finalmente, aprendiste cómo modificar la secuencia de teclas predeterminada para desconexión al conectarte a un contenedor, brindando flexibilidad en la gestión de tus interacciones con contenedores.