En Docker 1.1.2 (más reciente), ¿cuál es la forma correcta de separarse de un contenedor sin detenerlo?
Entonces, por ejemplo, si lo intento:
docker run -i -t foo /bin/bash
odocker attach foo
(para el contenedor que ya se está ejecutando)
ambos me llevan a una terminal en el contenedor, ¿cómo salgo de la terminal del contenedor sin detenerlo?
exit
y CTR+C
ambos detienen el contenedor.
Respuestas:
Actualización: Como se menciona en las respuestas por debajo de Ctrl+ p, Ctrl+ qpasará ahora a modo interactivo en modo demonio.
Bueno, Ctrl+ C(o Ctrl+ \) debería separarte del contenedor, pero matará al contenedor porque tu proceso principal es un golpe.
Una pequeña lección sobre docker. El contenedor no es un sistema operativo real completo. Cuando ejecuta un contenedor, el proceso que inicia toma el PID 1 y asume el poder de inicio. Entonces, cuando ese proceso finaliza, el demonio detiene el contenedor hasta que se inicia un nuevo proceso (a través de Docker Start) (Más explicación al respecto http://phusion.github.io/baseimage-docker/#intro )
Si desea un contenedor que se ejecute en modo separado todo el tiempo, le sugiero que use
Con un servidor ssh en el contenedor. (La forma más fácil es seguir el tutorial dockerizing openssh https://docs.docker.com/engine/examples/running_ssh_service/ )
O simplemente puede relanzar su contenedor a través de
(se separará de forma predeterminada)
fuente
-ti -d
, luego adjunte condocker attach
, luego separe con primero ctrl + p y luego ctrl + q. Pensé que podría usar solo uno de los atajos de teclado.Escriba Ctrl+ pluego Ctrl+ q. Le ayudará a cambiar el modo interactivo al modo demonio.
Ver https://docs.docker.com/v1.7/articles/basics/#running-an-interactive-shell .
fuente
Me enteré de esto y todas las respuestas anteriores son parcialmente correctas. Todo depende de cómo se inicie el contenedor. Todo se reduce a lo siguiente cuando se lanzó el contenedor:
-t
)-i
)^P^Q
funciona, PERO solo cuando-t
y-i
se utiliza para iniciar el contenedor:ctrl+c
funciona, PERO solo cuando-t
( sin-i
) se utiliza para iniciar el contenedor:La tercera forma de desprenderse
Sin embargo, hay una manera de separarse sin matar el contenedor; Necesitas otro caparazón. En resumen, ejecutar esto en otro shell separado y dejar el contenedor ejecutándose
pkill -9 -f 'docker.*attach'
:¿Por qué? Porque estás matando el proceso que te conectó al contenedor, no al contenedor en sí.
fuente
kill -9
señal no lo hace. El proceso finaliza y no tiene recurso. Supongo que otras señales le dan al contenedor la oportunidad de apagarse, mientras-9
que no.Si hace "docker attach" id. De contenedor ", ingresa al contenedor. Para salir del contenedor sin detener el contenedor, debe ingresar Ctrl+ P+Q
fuente
Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
Considero que la respuesta de Ashwin es la más correcta, mi respuesta anterior está a continuación.
Me gustaría agregar otra opción aquí que es ejecutar el contenedor de la siguiente manera
Luego puede ingresar al contenedor y ejecutar bash con
No es necesario instalar sshd :)
fuente
docker attach
que sería más estándar, al volver a conectar a la primera ejecución de bash.docker exec
También funciona aquí, sin embargo, crea un nuevo proceso de bash además del primero. Claro, el proceso se crea dentro del mismo contexto / entorno / contenedor del primero, sin embargo, es diferente (una analogía sería abrir una nueva pestaña de terminal en su emulador de terminal favorito).La forma predeterminada de desconectarse de un contenedor interactivo es Ctrl+ P Ctrl+ Q, pero puede anularlo cuando ejecuta un nuevo contenedor o se conecta a un contenedor existente utilizando el indicador --detach-keys .
fuente
Si lo adjuntaste
docker attach
, puedes separarlo eliminando el proceso de conexión de la ventana acoplable. La mejor manera es usar el parámetro sig-proxy para evitar pasar Ctrl + C a su contenedor:La misma opción está disponible para el
docker run
comando.fuente
php:7.3-apache
Si solo desea ver la salida del proceso que se ejecuta desde el contenedor, puede hacer una simple
docker container logs -f <container id>
.La
-f
bandera hace que la salida del contenedor sefollowed
actualice en tiempo real. Muy útil para depurar o monitorear.fuente
Puede usar la
--detach-keys
opción cuando ejecutadocker attach
para anular la secuencia CTRL+ P, CTRL+ predeterminada Q(que no siempre funciona).Por ejemplo, cuando corres
docker attach --detach-keys="ctrl-a" test
y presionas CTRL+ Asaldrás del contenedor, sin matarlo.Otros ejemplos:
docker attach --detach-keys="ctrl-a,x" test
- presioneCTRL+A
y luegoX
para salirdocker attach --detach-keys="a,b,c" test
- presioneA
, luegoB
, luegoC
para salirExtracto de la documentación oficial:
Si lo desea, puede configurar una anulación de la secuencia de teclas Docker para la separación. Esto es útil si la secuencia predeterminada de Docker entra en conflicto con la secuencia de teclas que usa para otras aplicaciones. Hay dos formas de definir su propia secuencia de teclas de separación, como una anulación por contenedor o como una propiedad de configuración en toda su configuración.
Para anular la secuencia de un contenedor individual, use la
--detach-keys="<sequence>"
bandera con el comando docker attach. El formato del<sequence>
o es una letra[a-Z]
, o sectrl-
combina con cualquiera de los siguientes:Estos
a
,ctrl-a
,X
, octrl-\\
valores son todos ejemplos de secuencias de teclas válidos. Para configurar una secuencia de teclas predeterminada de configuración diferente para todos los contenedores, consulte la sección Archivo de configuración .Nota: Esto funciona desde la versión Docker 1.10+ (en el momento de esta respuesta, la versión actual es 18.03)
fuente
Publicación anterior pero solo salga y luego comience de nuevo ... el problema es si está en una máquina con Windows Ctrl p o Ctrl P están atados para imprimir ... salir del inicio del contenedor no debería dañar nada
fuente