GNU/Linux >> Tutoriales Linux >  >> Linux

Docker no responde a CTRL+C en la terminal

Lo más probable es que la imagen del contenedor que usa no esté manejando las señales del proceso correctamente. Si está creando la imagen, cámbiela como sugiere la respuesta de Roland Webers. De lo contrario, intente ejecutarla con --init .

docker run -it --init ....

Esto corrige Ctrl+C para mí. Fuente:https://docs.docker.com/v17.09/engine/reference/run/#specify-an-init-process


Esta publicación propone CTRL-Z como una solución alternativa para enviar el proceso a un segundo plano y luego eliminar el proceso por su ID de proceso:No se puede eliminar el script de Python con Ctrl-C

Posibles problemas:

  • El programa detecta ctrl-c y no hace nada, muy poco probable.

  • Hay procesos en segundo plano que no se gestionan correctamente. Solo el proceso principal recibe la señal y los subprocesos se bloquean. Muy probable lo que está pasando.

Solución propuesta:

  • Consulte la documentación del programa sobre cómo se inicia y se detiene correctamente. ctrl-c parece no ser la forma correcta.

  • Envuelva el programa con un script bash docker-entrypoint.sh que bloquee el proceso del contenedor y pueda capturar ctrl-c. Este ejemplo de bash debería ayudar:https://rimuhosting.com/knowledgebase/linux/misc/trapping-ctrl-c-in-bash

  • Después de presionar ctrl-c, invoque el método de apagado adecuado para el cuaderno de ipython.


El problema es que Ctrl-C envía una señal al proceso de nivel superior dentro del contenedor, pero ese proceso no necesariamente reacciona como se esperaría. El proceso de nivel superior tiene el ID 1 dentro del contenedor, lo que significa que no obtiene los controladores de señal predeterminados que suelen tener los procesos. Si el proceso de nivel superior es un shell, puede recibir la señal a través de su propio controlador, pero no la reenvía al comando que se ejecuta dentro del shell. Los detalles se explican aquí. En ambos casos, el contenedor docker actúa como si simplemente ignorara Ctrl-C.

Si está creando sus propias imágenes, la solución es ejecutar un proceso de inicio mínimo, como tini o dumb-init, como el proceso de nivel superior dentro del contenedor.


Linux
  1. ¿El indicador de terminal no se ajusta correctamente?

  2. ¿Por qué Cd no es un programa?

  3. Terminal:¿Comando Termcapinfo no encontrado?

  4. ¿Lista de señales generadas por terminal (p. ej., Ctrl-c -> Sigint)?

  5. Tomcat funcionando, pero el puerto 8080 no responde

Configure Bonita, un servidor de gestión de procesos empresariales.

no se encontró el comando docker

Variable de entorno TERM no establecida

Docker no actualiza los cambios en el directorio

la contraseña de root no funciona para su en la terminal

¿Cuándo no debo matar -9 un proceso?