docker container attach
| Descripción | Conecta los flujos de entrada, salida y error estándar locales a un contenedor en ejecución |
|---|---|
| Uso | docker 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.
NoteEl comando
attachmuestra la salida del proceso de las instruccionesENTRYPOINTyCMDdel 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.
NoteUn 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
SIGINToSIGTERMa 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ón | Predeterminado | Descripción |
|---|---|---|
--detach-keys | Sobrescribe la secuencia de teclas para desconectarse de un contenedor | |
--no-stdin | No conecta la entrada estándar (STDIN) | |
--sig-proxy | true | Redirige 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.