Come si allega e si stacca dal processo di Docker?


Answers

Controlla anche https://docs.docker.com/engine/reference/commandline/attach/ :

docker attach --sig-proxy=false 304f5db405ec

Quindi utilizzare CTRL+c per staccare

Question

Posso collegarmi a un processo finestra mobile ma Ctrl + c non funziona per staccarlo da esso. exit interrompe sostanzialmente il processo.

Qual è il flusso di lavoro consigliato per far funzionare il processo, collegandolo occasionalmente per apportare alcune modifiche e quindi per staccarlo?




Per staccare da un contenitore funzionante, usare ^ P ^ Q (tenere premuto Ctrl , premere P , premere Q , rilasciare Ctrl ).

C'è un problema : funziona solo se il contenitore è stato avviato con sia -t che -i .

Se si dispone di un contenitore in esecuzione che è stato avviato senza una (o entrambe) di queste opzioni e si allega con docker attach , sarà necessario trovare un altro modo per staccare. A seconda delle opzioni scelte e del programma in esecuzione, ^ C potrebbe funzionare, oppure potrebbe uccidere l'intero contenitore. Dovrai sperimentare.

Un altro problema: a seconda dei programmi che si stanno utilizzando, il terminale, la shell, il client SSH o il multiplexer potrebbero intercettare sia ^ P sia ^ Q (di solito il secondo). Per verificare se questo è il problema, provare a eseguire o allegare l' --detach-keys z . Ora dovresti essere in grado di staccare premendo z , senza alcun modificatore. Se funziona, un altro programma sta interferendo. Il modo più semplice per ovviare a questo è impostare la propria sequenza di scollegamento usando l'argomento --detach-keys . (Per esempio, per uscire con ^ K , usa --attach-keys 'ctrl-k' .) In alternativa, puoi --attach-keys 'ctrl-k' a disabilitare l'intercettazione dei tasti nel tuo terminale o in un altro programma che interferisce. Ad esempio, stty start '' o stty start undef può impedire al terminale di intercettare ^ Q su alcuni sistemi POSIX, sebbene non abbia trovato che questo sia utile.




Nella stessa shell, tieni premuto il tasto ctrl e premi i tasti p poi q




Per staccare dal contenitore, tieni semplicemente premuto Ctrl e premi P + Q.

Per collegarsi a un contenitore funzionante si usa:

$ docker container attach "container_name"



Penso che questo dovrebbe dipendere dalla situazione. Prendi il seguente contenitore come esempio:

# 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) Usa " docker attach " per allegare il contenitore:

Poiché " docker attach " non assegnerà un nuovo tty, ma riutilizzerà il tty originale in esecuzione, quindi se si esegue il comando exit , causerà l'uscita del contenitore in esecuzione:

# 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

Quindi, a meno che tu non voglia veramente far uscire il contenitore in esecuzione, dovresti usare Ctrl + p + Ctrl + q .

(2) Usa " docker exec "

Poiché " docker exec " assegnerà una nuova tty, quindi penso che dovresti usare exit invece di Ctrl + p + Ctrl + q .

Quanto segue è l'esecuzione di Ctrl + p + Ctrl + q per uscire dal contenitore:

# 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

Quindi accedi nuovamente al contenitore, vedrai il processo di bash nel comando docker exec della docker in anteprima è ancora attivo (PID è 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