GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo desconectarse de un contenedor Docker sin detenerlo

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 .


Docker
  1. Cómo instalar WordPress usando Docker

  2. Cómo ejecutar MySQL en un contenedor Docker

  3. Cómo usar SSH en un contenedor Docker

  4. Cómo instalar Vim en un contenedor Docker

  5. Cómo crear una imagen personalizada desde un contenedor Docker

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo inspeccionar el contenido de una imagen Docker sin iniciar un contenedor

Cómo ejecutar Grafana en un contenedor Docker

Cómo crear una imagen de Docker desde un contenedor en ejecución

Cómo configurar un contenedor Apache Docker

Cómo ejecutar contenedores Docker