Los contenedores Docker tienen un modo interactivo que le permite adjuntar los flujos de entrada y salida de su terminal al proceso del contenedor. Presionar Ctrl-C generalmente terminará ese
proceso, haciendo que el contenedor se detenga. Esto es para desconectarse de una sesión sin detener el contenedor.
Separar sin parar
Docker admite una combinación de teclado para separarse con gracia de un contenedor. Presione Ctrl-P, seguido de Ctrl-Q, para desconectarse de su conexión.
Volverá a su caparazón, pero el proceso adjunto anteriormente permanecerá vivo, manteniendo su contenedor en funcionamiento. Puede verificar esto usando docker ps
para obtener una lista de contenedores en ejecución.
Presionando Ctrl-C o ejecutando exit
El comando generalmente eliminará el proceso de primer plano del contenedor a menos que se haya configurado especialmente. Un contenedor de Docker debe tener un proceso en primer plano en ejecución; un contenedor sin uno entrará en estado detenido.
Cambiando la Secuencia del Teclado Separado
Puede cambiar la secuencia de separación para que coincida con su preferencia o evitar un conflicto con los métodos abreviados de teclado reconocidos por su aplicación. Agregue un detachKeys
propiedad a su ~/.docker/config.json
archivo para especificar las claves que desea utilizar.
Docker es compatible con a-z
caracteres y @
, ^
y _
, símbolos, así como el signo del corchete izquierdo ([
) y dos barras diagonales inversas (\
). Todos estos se usan junto con Ctrl-
llave; las letras también se pueden usar individualmente, sin Ctrl
.
Las secuencias de teclas se expresan como una lista separada por comas:
{ "detachKeys": "Ctrl-d,d" }
Este ejemplo se separaría del contenedor cuando presionas Ctrl-D
seguido inmediatamente por la d
clave.
Cambiar la Secuencia en una base Por-Contenedor
Más allá de cambiar su configuración global, Docker acepta detachKeys
reemplaza por contenedor y por archivo adjunto. Agrega el --detach-keys
marca a los comandos que se pueden adjuntar a los procesos del contenedor para establecer una secuencia específica.
Los comandos que soportan esto son:
docker run
docker start
docker exec
docker attach
Aquí se explica cómo adjuntarlo a un contenedor y luego usar Ctrl-d
, seguido de un guión bajo, para separar:
docker attach my-container --detach-keys="Ctrl-d,_"
El --detach-keys
flag usa el mismo formato de secuencia de teclas que detachKeys
opción de configuración. La bandera anula su docker.json
entorno; esto, a su vez, anula la secuencia predeterminada Ctrl-P/Ctrl-Q de Docker.
Separar cuando la secuencia del teclado no funciona
A veces, puede encontrar un proceso de contenedor que se niega a separarse, incluso cuando emite la secuencia de teclado. Esto puede suceder si el flujo de entrada del contenedor no está conectado a su terminal (-i
flag) o no tiene asignado pseudo-TTY (-t
bandera). También podría encontrarse con este problema si el proceso de su contenedor maneja la secuencia de teclas de desconexión y no la anuló cuando adjuntó.
Todavía es posible separar su terminal del contenedor en estas circunstancias. Debe abrir temporalmente otra ventana de shell y usarla para matar el docker.attach
proceso que mantiene activo el archivo adjunto.
Primero busque el ID de proceso del proceso adjunto:
ps -ef | grep attach
Utilice la salida de ps
para identificar el docker.attach
proceso que necesita para matar. El comando en el CMD
La columna debe identificar el archivo adjunto que está buscando. Anote el número PID relevante y use el kill
comando para terminar este proceso:
kill -9 <PID>
Debería ver que su shell original se separa de su contenedor Docker y vuelve a un estado operativo normal. Ahora puede cerrar el segundo caparazón y continuar usando el original.
Esta técnica funciona eliminando el proceso de la CLI de Docker que conectó el terminal al contenedor, no el proceso dentro del contenedor que lo mantiene en ejecución. Su terminal original vuelve a ser utilizable y el contenedor permanece activo.
Reconexión a su contenedor
Puede volver a adjuntar a los contenedores mediante docker attach
dominio. Esto adjunta automáticamente los flujos de entrada, salida y error de su terminal al contenedor especificado:
docker attach my-container
Los tres flujos están conectados de forma predeterminada. Puede omitir el flujo de entrada pasando --no-stdin
bandera. La salida del contenedor se transmitirá a su terminal, pero no podrá proporcionar ninguna entrada.
Use la secuencia de teclado nuevamente para separar, o Ctrl-C
para detener el proceso y el contenedor. Si usa Ctrl-C
o exit
, docker attach
establecerá el $?
variable en su shell correctamente para que pueda inspeccionar el código de salida del contenedor.
Resumen
La forma correcta de desconectarse de un contenedor Docker es una secuencia de teclado bastante oscura que lo devuelve a su shell. Puede personalizar esta secuencia para aumentar la recordación y evitar conflictos con el manejo del teclado de su contenedor.
Las secuencias de separación del teclado pueden ser ineficaces en algunas circunstancias. Todavía es posible desconectarse de su contenedor al identificar y eliminar el proceso que respalda el archivo adjunto. Comandos regulares de Unix como ps
y kill
debe usarse en este escenario.
Finalmente, si desea que su contenedor se separe permanentemente, inícielo con -d
flag (docker run -d my-image:latest
). Esto enviará el contenedor directamente al fondo y no emitirá ningún resultado a su shell. Los contenedores separados siempre están visibles usando docker ps
comando y se puede detener con docker stop my-container
.