web-dev-qa-db-fra.com

Comment vous attachez-vous et détachez-vous du processus de Docker?

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é?

396
MarkL

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 ):

  • le menu fixe -t -i → peut être détaché avec ^P^Q et recollé avec le menu fixe
  • l'exécution du menu fixe -i → ne peut pas être détachée avec ^P^Q; va perturber stdin
  • l'exécution du menu fixe → ne peut pas être détachée avec ^P^Q; peut client SIGKILL; peut se rattacher avec l'attache de docker
588
Ken Cochrane

Découvrez aussi l'option --sig-proxy) :

docker attach --sig-proxy=false 304f5db405ec

Puis utilisez CTRL+c pour détacher

165
czerasz

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.

88
Colin Su

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
43
Nan Xiao

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.

24
Zenexer

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>
23
Adi Fatol

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.

9
Pierluigi Vernetto

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"
8
gXg

Dans le même shell, maintenez la touche ctrl enfoncée et appuyez sur les touches p puis q

4
ravthiru

Je suis sur un Mac, et pour une raison quelconque, Ctrl-pCtrl-q ne fonctionnerait que si je tenais aussi Shift

2
Jared Williams

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 ....

0
shankar