run - docker tag example
¿Cómo se adjunta y se separa del proceso de Docker? (10)
Creo que esto debería depender de la situación. Tome el siguiente contenedor como ejemplo:
# docker run -it -d ubuntu
91262536f7c9a3060641448120bda7af5ca812b0beb8f3c9fe72811a61db07fc
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 5 seconds ago Up 4 seconds serene_goldstine
(1) Use " docker attach
" para adjuntar el contenedor:
Dado que " docker attach
" no asignará un tty nuevo, sino que reutilizará el tty en ejecución original, por lo que si ejecuta el comando exit
, el contenedor en ejecución se cerrará:
# docker attach 91262536f7c9
exit
exit
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 39 minutes ago Exited (0) 3 seconds ago serene_goldstine
Entonces, a menos que realmente desee hacer que el contenedor se ejecute, debe usar Ctrl + p + Ctrl + q .
(2) Utilice " docker exec
"
Dado que " docker exec
" asignará un nuevo tty, creo que debería usar exit
lugar de Ctrl + p + Ctrl + q .
Lo siguiente es ejecutar Ctrl + p + Ctrl + q para salir del contenedor:
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss 04:03 0:00 bash
root 28 0.0 0.0 15564 1148 ? R+ 04:03 0:00 ps -aux
root@91262536f7c9:/# echo $$
15
Luego, vuelva a iniciar sesión en el contenedor y verá que el proceso de bash
en el comando exper docker exec
sigue vivo (PID es 15):
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss+ 04:03 0:00 bash
root 29 0.0 0.0 18164 1888 ? Ss 04:04 0:00 bash
root 42 0.0 0.0 15564 1148 ? R+ 04:04 0:00 ps -aux
root@91262536f7c9:/# echo $$
29
Puedo adjuntar a un proceso de docker pero Ctrl + c no funciona para separarlo de él. exit
básicamente detiene el proceso.
¿Cuál es el flujo de trabajo recomendado para ejecutar el proceso, adjuntarlo ocasionalmente para realizar algunos cambios y luego separarlo?
Cuando nada más funcione, abre una nueva terminal y luego:
$ ps aux | grep attach
username <pid_here> .............. 0:00 docker attach <CONTAINER_HASH_HERE>
username <another_pid> .............. 0:00 grep --color=auto attach
$ kill -9 <pid_here>
Echa un vistazo también a https://docs.docker.com/engine/reference/commandline/attach/ :
docker attach --sig-proxy=false 304f5db405ec
Luego usa CTRL+c
para separar
En el mismo shell, mantenga presionada la tecla ctrl
y presione las teclas p
luego q
Para desconectar el tty sin salir del shell, use la secuencia de escape Ctrl + p + Ctrl + q .
más detalles aquí: https://docs.docker.com/engine/reference/commandline/attach/
Para separar de un contenedor en ejecución, use ^ P ^ Q (mantenga presionada la tecla Ctrl , presione P , presione Q , suelte Ctrl ).
Hay un problema: esto solo funciona si el contenedor se inició con -t
y -i
.
Si tiene un contenedor en ejecución que se inició sin una (o ambas) de estas opciones y se adjunta con la docker attach
, deberá encontrar otra forma de separar. Dependiendo de las opciones que elija y del programa que se está ejecutando, ^ C puede funcionar, o puede matar todo el contenedor. Tendrás que experimentar.
Otra captura: dependiendo de los programas que esté utilizando, su terminal, shell, cliente SSH o multiplexor podrían estar interceptando ^ P o ^ Q (generalmente este último). Para probar si este es el problema, intente ejecutar o adjuntar con el --detach-keys z
. Ahora debería poder separar presionando z , sin ningún modificador. Si esto funciona, otro programa está interfiriendo. La forma más fácil de --detach-keys
esto es establecer su propia secuencia de --detach-keys
mediante el argumento --detach-keys
. (Por ejemplo, para salir con ^ K , use --detach-keys ''ctrl-k''
). Alternativamente, puede intentar deshabilitar la intercepción de las teclas en su terminal u otro programa interferente. Por ejemplo, stty start ''''
o stty start undef
puede impedir que el terminal intercepte ^ Q en algunos sistemas POSIX, aunque no he encontrado que esto sea útil.
Para separar del contenedor, simplemente mantenga presionada la tecla Ctrl y presione P + Q.
Para adjuntar a un contenedor en ejecución se utiliza:
$ docker container attach "container_name"
Si solo desea realizar alguna modificación en los archivos o inspeccionar 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 el shell bash, y usted podría escapar de él directamente ^c
, no afectará el proceso original.
Tuve el mismo problema, ctrl-P y Q no funcionaban, ni ctrl-C ... finalmente abrí otra sesión de terminal e hice "docker stop containerid " y "docker start containerid " y terminé el trabajo. Extraño.
para detener un proceso de acoplamiento y liberar los puertos, primero use ctrl-c para salir del contenedor y luego use el docker ps para encontrar la lista de contenedores en ejecución. Luego puede usar la parada del contenedor de la ventana acoplable 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 sus consultas ....