Puedo adjuntarme a un proceso de acoplador pero Ctrl+ cno funciona para desconectarlo. exit
básicamente detiene el proceso.
¿Cuál es el flujo de trabajo recomendado para ejecutar el proceso, adjuntándolo ocasionalmente para realizar algunos cambios y luego separándolo?
xterm
,konsole
etc.? Funciona para mí (me despido).Respuestas:
Para separar el tty sin salir del shell, use la secuencia de escape Ctrl+ Pseguido de Ctrl+ Q. Más detalles aquí .
Información adicional de esta fuente :
^P^Q
y volver a conectar con Docker Attach^P^Q
; interrumpirá stdin^P^Q
; puede SIGKILL cliente; se puede volver a colocar con acoplador acoplablefuente
"detachKeys": "ctrl-a,a"
en el archivo de .docker / config.json o--detach-keys "ctrl-a,a"
en la línea de comandos con adjuntar etc.Ctrl + Z
no se separa; solo da origen al proceso. No es lo mismo que separarse y conlleva una penalización de rendimiento.Mira también la
--sig-proxy
opción :Luego use CTRL+ cpara separar
fuente
docker run -ti --sig-proxy=false busybox top
que parece no funcionar, el proceso se elimina con ctrl-c pero al comenzardocker run -t -sig-proxy=false busybox top
parece funcionar y permitir salir con ctrl-cCtrl-c
detendrá el contenedor también.Si solo desea realizar alguna modificación en los archivos o inspeccionar los procesos, esta es otra solución que probablemente desee.
Puede ejecutar el siguiente comando para ejecutar un nuevo proceso desde el contenedor existente:
sudo docker exec -ti [CONTAINER-ID] bash
iniciará un nuevo proceso con bash shell, y podría escapar de él directamente Ctrl+ C, no afectará el proceso original.
fuente
exec
no lo es.Creo que esto debería depender de la situación. Tome el siguiente contenedor como ejemplo:
(1) Use "
docker attach
" para adjuntar el contenedor:Como "
docker attach
" no asignará un nuevo tty, sino que reutilizará el tty original en ejecución, por lo que si ejecuta elexit
comando, provocará la salida del contenedor en ejecución:Entonces, a menos que realmente quiera hacer que la salida del contenedor se ejecute, debe usar Ctrl+ p+ Ctrl+ q.
(2) Use "
docker exec
"Dado que "
docker exec
" se asignará un nuevo TTY, así que creo que se debe utilizarexit
en lugar de Ctrl+ p+ Ctrl+ q.Lo siguiente es ejecutar Ctrl+ p+ Ctrl+ qpara salir del contenedor:
Luego, vuelva a iniciar sesión en el contenedor, verá que el
bash
proceso en eldocker exec
comando anterior todavía está vivo (PID es 15):fuente
Para desconectarse de un contenedor en funcionamiento, use ^P^Q(sostenga Ctrl, presione P, presione Q, suelteCtrl ).
Hay un inconveniente: esto solo funciona si el contenedor se inició con ambos
-t
y-i
.Si tiene un contenedor en ejecución que se inició sin una (o ambas) de estas opciones, y se conecta con
docker attach
él, necesitará encontrar otra forma de desconectarse. Dependiendo de las opciones que elija y del programa que se esté ejecutando, ^Cpuede funcionar o puede matar todo el contenedor. Tendrás que experimentar.Otro inconveniente: Dependiendo de los programas que esté utilizando, su terminal, shell, cliente SSH o multiplexor podrían estar interceptando uno ^Pu otro ^Q(generalmente el último). Para probar si este es el problema, intente ejecutar o adjuntar con el
--detach-keys z
argumento. Ahora debería poder desconectarse presionando z, sin ningún modificador. Si esto funciona, otro programa está interfiriendo. La forma más fácil de evitar esto es establecer su propia secuencia de separación utilizando el--detach-keys
argumento. (Por ejemplo, para salir ^K, use--detach-keys 'ctrl-k'
). Alternativamente, puede intentar deshabilitar la intercepción de las teclas en su terminal u otro programa que interfiera. Por ejemplo,stty start ''
ostty start undef
puede evitar que el terminal intercepte^Q en algunos sistemas POSIX, aunque no he encontrado que esto sea útil.fuente
cuando nada más funciona, abra una nueva terminal y luego:
fuente
-9
No fue necesario.docker attach
y no su padre.Para separarse del contenedor, simplemente sostenga Ctrly presione P+Q .
Para adjuntar a un contenedor en ejecución que utiliza:
fuente
Yo tenía el mismo problema, ctrl- Py Qno funcionaría, ni ctrl- C... con el tiempo abrí otra sesión de terminal y lo hice "ventana acoplable parada ContainerId " y "ventana acoplable inicio ContainerId " y se hizo el trabajo. Extraño.
fuente
--rm
bandera.Ctrl+P
yCtrl+Q
funciona si comenzó el contenedor con-it
bandera.En el mismo caparazón, mantenga presionada la ctrltecla y presione las teclas pluegoq
fuente
-it
bandera.Estoy en un Mac, y por alguna razón, Ctrl- p Ctrl- qsólo funcionaría si también sostuveShift
fuente
docker ps
docker kill ${containerId}
fuente
para detener un proceso de docker y liberar los puertos, primero use ctrl- cpara salir de la salida del contenedor y luego use docker ps para encontrar la lista de contenedores en ejecución. Luego puede usar el contenedor Docker Stop para detener ese proceso y liberar sus puertos. El nombre del contenedor que puede encontrar en el comando docker ps que da el nombre en la columna de nombre. Espero que esto resuelva tus consultas ...
fuente
Si solo necesita que el proceso de acoplador vaya en segundo plano, puede usar
Ctrl + Z
Tenga en cuenta que no es una separación real y viene con una penalización de rendimiento. (Puede devolverlo a primer plano con el
bg
comando).Otra opción es simplemente cerrar su terminal, si ya no lo necesita.
fuente
Para cualquiera que se haya encontrado con el mismo problema que yo tuve (no se puede desconectar sin matar el contenedor, incluso cuando se configura la tecla de desconexión) ......
Al comenzar sus contenedores con
docker-compose up -d
en lugar de usar
docker attach {container name}
para ver el registro de colas ...try
docker-compose logs -f {service name}
ctrl- cmata la cola del tronco sin matar tu contenedor{service name}
ser el servicio que figura en el lado de su archivo docker-compose.yml .. (por ejemplo, mientras que el nombre del contenedor = elk_logstash_1 -> nombre del servicio = logstashHTH
fuente
Actualizar
Por lo general, usaba Docker Attach para ver qué mostraba STDOUT, para solucionar problemas de contenedores. Acabo de encontrar
docker logs --follow 621a4334f97b
, lo que me permite ver el STDOUT al mismo tiempo que puedo controlarlo sin afectar el funcionamiento del contenedor! Exactamente lo que siempre he querido.... naturalmente, deberá sustituir su propia ID de contenedor.
Respuesta original
Quería dejar el contenedor en funcionamiento, pero me había conectado sin iniciar el contenedor
-it
. Mi solución fue sacrificar mi conexión SSH en su lugar (ya que fui SSHed en la máquina que ejecutaba los contenedores). Matar esa sesión ssh dejó el contenedor intacto pero me separó de él.fuente