Je peux attacher à un processus de docker mais Ctrl+c ne fonctionne pas pour s'en détacher. exit
arrête fondamentalement le processus.
Quel est le flux de travail recommandé pour que le processus soit en cours d'exécution, auquel il est parfois associé pour effectuer certaines modifications, puis détaché?
Pour détacher le terminal sans quitter le shell, utilisez la séquence d'échappement Ctrl-pCtrl-q.
plus de détails ici: https://docs.docker.com/engine/reference/commandline/attach/
informations supplémentaires issues de cette source ( https://groups.google.com/forum/#!msg/docker-user/nWXAnyLP9-M/kbv-FZpF4rUJ ):
^P^Q
et recollé avec le menu fixe^P^Q
; va perturber stdin^P^Q
; peut client SIGKILL; peut se rattacher avec l'attache de dockerDécouvrez aussi l'option --sig-proxy
) :
docker attach --sig-proxy=false 304f5db405ec
Puis utilisez CTRL+c
pour détacher
Si vous souhaitez simplement modifier des fichiers ou inspecter des processus, voici une solution que vous souhaitez probablement.
Vous pouvez exécuter la commande suivante pour exécuter un nouveau processus à partir du conteneur existant:
Sudo docker exec -ti [CONTAINER-ID] bash
va démarrer un nouveau processus avec bash Shell, et vous pourriez y échapper directement par ^c
, cela n'affectera pas le processus d'origine.
Je pense que cela devrait dépendre de la situation.Prenons comme exemple le conteneur suivant:
# 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) Utilisez "docker attach
" pour attacher le conteneur:
Depuis "docker attach
" ne le fera pas allouer un nouveau tty, mais réutiliser le tty en cours d’exécution. Ainsi, si vous exécutez la commande exit
, le conteneur en sortie sera renvoyé:
# 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
Donc, sauf si vous voulez vraiment faire sortir le conteneur en cours d'exécution, vous devriez utiliser Ctrl+p + Ctrl+q.
(2) Utilisez "docker exec
"
Depuis "docker exec
" volonté allouer un nouveau tty, je pense donc que vous devriez utiliser exit
au lieu de Ctrl+p + Ctrl+q.
Ce qui suit est en cours d'exécution Ctrl+p + Ctrl+q quitter le conteneur:
# 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
Puis connectez-vous à nouveau au conteneur, vous verrez le processus bash
dans la commande précédente docker exec
toujours en vie (le PID est 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
Pour vous détacher d'un conteneur en cours d'exécution, utilisez ^P^Q (tenez le Ctrl, presse P, presse Q, Libération Ctrl).
Il y a un problème: cela ne fonctionne que si le conteneur a été démarré avec les deux -t
et -i
.
Si vous avez un conteneur en cours d'exécution qui a été démarré sans l'une (ou les deux) de ces options et que vous attachez avec docker attach
, vous devrez trouver un autre moyen de se détacher. En fonction des options choisies et du programme en cours d'exécution, ^C peut fonctionner ou tuer tout le conteneur. Vous devrez expérimenter.
Autre attrait: Selon les programmes que vous utilisez, votre terminal, Shell, votre client SSH ou votre multiplexeur peut intercepter soit ^P ou ^Q (généralement ce dernier). Pour vérifier si tel est le problème, essayez d'exécuter ou de joindre avec l'argument --detach-keys z
. Vous devriez maintenant pouvoir vous détacher en appuyant sur z, sans aucun modificateur. Si cela fonctionne, un autre programme interfère. Le moyen le plus simple de contourner ce problème consiste à définissez votre propre séquence de détachement à l'aide de l'argument --detach-keys
. (Par exemple, pour sortir avec ^K, utilisez --detach-keys 'ctrl-k'
.) Vous pouvez également essayer de désactiver l’interception des clés de votre terminal ou de tout autre programme perturbateur. Par exemple, stty start ''
ou stty start undef
peut empêcher le terminal d'intercepter ^Q sur certains systèmes POSIX, bien que cela ne me soit pas utile.
quand rien d'autre ne fonctionne, ouvrez un nouveau terminal alors:
$ 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>
J'ai eu le même problème, Ctrl-P et Q ne fonctionneraient pas, ni Ctrl-C ... finalement j'ai ouvert une autre session de terminal et j'ai fait "docker stop containerid" et "docker start containerid "et le travail est fait. Bizarre.
Pour détacher du conteneur vous tenez simplement Ctrl et appuyez sur P + Q.
Pour attacher à un conteneur actif que vous utilisez:
$ docker container attach "container_name"
Dans le même shell, maintenez la touche ctrl
enfoncée et appuyez sur les touches p
puis q
Je suis sur un Mac, et pour une raison quelconque, Ctrl-pCtrl-q ne fonctionnerait que si je tenais aussi Shift
pour arrêter un processus de menu fixe et libérer les ports, utilisez d'abord ctrl-c pour quitter la sortie du conteneur, puis utilisez le menu fixe ps pour rechercher la liste des conteneurs en cours d'exécution. Ensuite, vous pouvez utiliser le conteneur docker stop pour arrêter ce processus et libérer ses ports. Le nom du conteneur que vous pouvez trouver à partir de la commande docker ps qui donne le nom dans la colonne de noms. J'espère que cela résoudra vos questions ....