Compartir comentarios
Las respuestas se generan en base a la documentación.

docker container attach

DescripciónConecta los flujos de entrada, salida y error estándar locales a un contenedor en ejecución
Usodocker container attach [OPTIONS] CONTAINER
Alias
docker attach

Descripción

Usa docker attach para conectar la entrada estándar, la salida y el error estándar de tu terminal (o cualquier combinación de las tres) a un contenedor en ejecución utilizando el ID o nombre del contenedor. Esto te permite ver su salida o controlarlo de forma interactiva, como si los comandos se estuvieran ejecutando directamente en tu terminal.

Note

El comando attach muestra la salida del proceso de las instrucciones ENTRYPOINT y CMD del contenedor. Esto puede hacer parecer que el comando attach está colgado, cuando en realidad el proceso simplemente puede no estar escribiendo ninguna salida en ese momento.

Puedes conectarte al mismo proceso de contenedor varias veces simultáneamente, desde diferentes sesiones en el host de Docker.

Para detener un contenedor, usa CTRL-c. Esta secuencia de teclas envía SIGKILL al contenedor. Si --sig-proxy es true (por defecto), CTRL-c envía un SIGINT al contenedor. Si el contenedor se ejecutó con -i y -t, puedes desconectarte de él y dejarlo en ejecución utilizando la secuencia de teclas CTRL-p CTRL-q.

Note

Un proceso que se ejecuta como PID 1 dentro de un contenedor recibe un trato especial por parte de Linux: ignora cualquier señal con la acción predeterminada. Por lo tanto, el proceso no finaliza con SIGINT o SIGTERM a menos que esté programado para hacerlo.

No puedes redirigir la entrada estándar de un comando docker attach mientras te conectas a un contenedor con TTY habilitada (usando las opciones -i y -t).

Mientras un cliente está conectado a la salida estándar/entrada (stdio) del contenedor mediante docker attach, Docker utiliza un búfer de memoria de aproximadamente 1 MB para maximizar el rendimiento de la aplicación. Una vez que este búfer está lleno, la velocidad de la conexión de la API se ve afectada, lo que a su vez influye en la velocidad de escritura del proceso de salida. Esto es similar a otras aplicaciones como SSH. Debido a esto, no se recomienda ejecutar aplicaciones críticas para el rendimiento que generen mucha salida en primer plano a través de una conexión de cliente lenta. En su lugar, usa el comando docker logs para acceder a los logs.

Opciones

OpciónPredeterminadoDescripción
--detach-keysSobrescribe la secuencia de teclas para desconectarse de un contenedor
--no-stdinNo conecta la entrada estándar (STDIN)
--sig-proxytrueRedirige todas las señales recibidas al proceso

Ejemplos

Conectarse a y desconectarse de un contenedor en ejecución

El siguiente ejemplo inicia un contenedor Alpine ejecutando top en modo detached, luego se conecta al contenedor:

$ docker run -d --name topdemo alpine top -b

$ docker attach topdemo

Mem: 2395856K used, 5638884K free, 2328K shrd, 61904K buff, 1524264K cached
CPU:   0% usr   0% sys   0% nic  99% idle   0% io   0% irq   0% sirq
Load average: 0.15 0.06 0.01 1/567 6
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
    1     0 root     R     1700   0%   3   0% top -b

Como el contenedor se inició sin las opciones -i y -t, las señales se reenvían al proceso conectado, lo que significa que la secuencia predeterminada de teclas de desconexión CTRL-p CTRL-q no produce ningún efecto, pero presionar CTRL-c finaliza el contenedor:

<...>
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
    1     0 root     R     1700   0%   7   0% top -b
^P^Q
^C

$ docker ps -a --filter name=topdemo

CONTAINER ID   IMAGE     COMMAND    CREATED          STATUS                       PORTS     NAMES
96254a235bd6   alpine    "top -b"   44 seconds ago   Exited (130) 8 seconds ago             topdemo

Repitiendo el ejemplo anterior, pero esta vez con las opciones -i y -t definidas:

$ docker run -dit --name topdemo2 alpine /usr/bin/top -b

Ahora, al conectarse al contenedor y presionar CTRL-p CTRL-q ("read escape sequence"), la CLI de Docker gestiona la secuencia de desconexión y el comando attach se desconecta del contenedor. Al comprobar el estado del contenedor con docker ps se muestra que el contenedor todavía se está ejecutando en segundo plano:

$ docker attach topdemo2

Mem: 2405344K used, 5629396K free, 2512K shrd, 65100K buff, 1524952K cached
CPU:   0% usr   0% sys   0% nic  99% idle   0% io   0% irq   0% sirq
Load average: 0.12 0.12 0.05 1/594 6
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
    1     0 root     R     1700   0%   3   0% top -b
read escape sequence

$ docker ps -a --filter name=topdemo2

CONTAINER ID   IMAGE     COMMAND    CREATED          STATUS          PORTS     NAMES
fde88b83c2c2   alpine    "top -b"   22 seconds ago   Up 21 seconds             topdemo2

Obtener el código de salida del comando del contenedor

Y en este segundo ejemplo, puedes ver que el código de salida devuelto por el proceso bash también es devuelto por el comando docker attach a quien lo invocó:

$ docker run --name test -dit alpine
275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab

$ docker attach test
/# exit 13

$ echo $?
13

$ docker ps -a --filter name=test

CONTAINER ID   IMAGE     COMMAND     CREATED              STATUS                       PORTS     NAMES
a2fe3fd886db   alpine    "/bin/sh"   About a minute ago   Exited (13) 40 seconds ago             test

Sobrescribir la secuencia de desconexión (--detach-keys)

Usa la opción --detach-keys para sobrescribir la secuencia de teclas de Docker para la desconexión. Esto es útil si la secuencia predeterminada de Docker entra en conflicto con la secuencia de teclas que usas para otras aplicaciones. Hay dos formas de definir tu propia secuencia de teclas de desconexión: como una sobrescritura por contenedor o como una propiedad de configuración en toda tu configuración.

Para sobrescribir la secuencia de un contenedor individual, usa la flag --detach-keys="<secuencia>" con el comando docker attach. El formato de la <secuencia> es una letra [a-Z] o la combinación ctrl- con cualquiera de las siguientes:

  • a-z (un solo carácter alfabético en minúscula)
  • @ (arroba)
  • [ (corchete izquierdo)
  • \\ (dos barras invertidas)
  • _ (guion bajo)
  • ^ (circunflejo)

Los valores a, ctrl-a, X o ctrl-\\ son ejemplos de secuencias de teclas válidas. Para configurar una secuencia de teclas predeterminada diferente para todos los contenedores, consulta la sección de archivo de configuración.