Je peux m'attacher à un processus Docker mais Ctrl + cne fonctionne pas pour s'en détacher. exit
stoppe essentiellement le processus.
Quel est le flux de travail recommandé pour que le processus s'exécute, s'y rattache parfois pour apporter des modifications, puis se détache?
xterm
,konsole
etc. fonctionne-t-elle? Ça marche pour moi (je me détache).Réponses:
Pour détacher le tty sans quitter le shell, utilisez la séquence d'échappement Ctrl+ Psuivie de Ctrl+ Q. Plus de détails ici .
Informations supplémentaires de cette source :
^P^Q
et fixé à nouveau avec docker attach^P^Q
; va perturber stdin^P^Q
; peut client SIGKILL; peut se rattacher avec un dockerla source
"detachKeys": "ctrl-a,a"
dans votre fichier .docker / config.json ou--detach-keys "ctrl-a,a"
sur la ligne de commande avec attacher, etc.Ctrl + Z
ne se détache pas; il ne fait que mettre en contexte le processus. Ce n'est pas la même chose que le détachement et entraîne une pénalité de performance.Découvrez également l'
--sig-proxy
option :Utilisez ensuite CTRL+ cpour détacher
la source
docker run -ti --sig-proxy=false busybox top
ce qui ne semble pas fonctionner, le processus est tué avec ctrl-c mais en commençant pardocker run -t -sig-proxy=false busybox top
semble fonctionner et permettre de quitter avec ctrl-cCtrl-c
arrêtera également le conteneur.Si vous souhaitez simplement apporter des modifications aux fichiers ou inspecter les processus, voici une autre 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
démarrera un nouveau processus avec le shell bash, et vous pourriez y échapper par Ctrl+ Cdirectement, cela n'affectera pas le processus d'origine.
la source
exec
ne l'est pas.Je pense que cela devrait dépendre de la situation. Prenons le conteneur suivant comme exemple:
(1) Utilisez "
docker attach
" pour fixer le conteneur:Puisque "
docker attach
" n'allouera pas un nouveau tty, mais réutilisera le tty en cours d'exécution d'origine, donc si vous exécutez laexit
commande, cela provoquera la sortie du conteneur en cours d'exécution:Donc, à moins que vous ne vouliez vraiment exécuter la sortie du conteneur, vous devez utiliser Ctrl+ p+ Ctrl+ q.
(2) Utilisez "
docker exec
"Depuis «
docker exec
» va allouer une nouvelle TTY, je pense que vous devriez utiliser auexit
lieu de Ctrl+ p+ Ctrl+ q.Ce qui suit exécute Ctrl+ p+ Ctrl+ qpour quitter le conteneur:
Ensuite, connectez-vous à nouveau au conteneur, vous verrez que le
bash
processus dans ladocker exec
commande précédente est toujours actif (PID est 15):la source
Pour vous détacher d'un conteneur en cours d'exécution, utilisez ^P^Q(maintenez la Ctrltouche P, appuyez Q, appuyez , relâchez Ctrl).
Il y a un hic: 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 vous y attachez
docker attach
, vous devrez trouver un autre moyen de le détacher. Selon les options que vous avez choisies et le programme en cours d'exécution, cela ^Cpeut fonctionner ou tuer le conteneur entier. Vous devrez expérimenter.Un autre hic: selon les programmes que vous utilisez, votre terminal, shell, client SSH ou multiplexeur peut intercepter soit ^Pou ^Q(généralement ce dernier). Pour tester si c'est le problème, essayez d'exécuter ou de joindre avec l'
--detach-keys z
argument. Vous devriez maintenant pouvoir vous détacher en appuyant sur z, sans aucun modificateur. Si cela fonctionne, un autre programme interfère. La façon la plus simple de contourner ce problème consiste à définir votre propre séquence de détachement à l'aide de l'--detach-keys
argument. (Par exemple, pour quitter avec ^K, utilisez--detach-keys 'ctrl-k'
.) Alternativement, vous pouvez essayer de désactiver l'interception des clés dans votre terminal ou tout autre programme interférant. Par exemple,stty start ''
oustty start undef
peut empêcher le terminal d'intercepter^Q sur certains systèmes POSIX, même si je n'ai pas trouvé cela utile.la source
quand rien d'autre ne fonctionne, ouvrez un nouveau terminal puis:
la source
-9
n'était pas nécessaire.docker attach
et non son parent.Pour vous détacher du conteneur, il vous suffit de tenir Ctrlet d'appuyer sur P+ Q.
Pour attacher à un conteneur en cours d'exécution que vous utilisez:
la source
J'ai eu le même problème, ctrl- Pet Qne fonctionnerait 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 cela a fait le travail. Bizarre.
la source
--rm
indicateur.Ctrl+P
etCtrl+Q
fonctionne si vous avez démarré le conteneur avec-it
indicateur.Dans la même coque, maintenez la ctrltouche et appuyez sur les touches ppuisq
la source
-it
indicateur.Je suis sur un Mac, et pour une raison quelconque, Ctrl- p Ctrl- qne fonctionnerait que si je tenais égalementShift
la source
docker ps
docker kill ${containerId}
la source
pour arrêter un processus de docker et libérer les ports, utilisez d'abord ctrl- cpour quitter la sortie du conteneur, puis utilisez docker ps pour trouver la liste des conteneurs en cours d'exécution. Ensuite, vous pouvez utiliser l'arrêt du conteneur Docker 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 nom. J'espère que cela résoudra vos questions ....
la source
Si vous avez seulement besoin que le processus de docker passe en arrière-plan, vous pouvez utiliser
Ctrl + Z
Sachez que ce n'est pas un vrai détachement et qu'il s'accompagne d'une pénalité de performance. (Vous pouvez le remettre au premier plan avec le
bg
commande).Une autre option consiste à simplement fermer votre terminal, si vous n'en avez plus besoin.
la source
Pour tous ceux qui ont rencontré le même problème que moi (ne peuvent pas se détacher sans tuer le conteneur, même lors du réglage de la clé de détachement) ......
Lors du démarrage de vos conteneurs avec
docker-compose up -d
au lieu d'utiliser
docker attach {container name}
pour afficher le journal des résidus ....essayer
docker-compose logs -f {service name}
ctrl- ctue la queue du journal sans tuer votre conteneur{service name}
étant le service répertorié dans le côté de votre fichier docker-compose.yml .. (par exemple lorsque le nom du conteneur = elk_logstash_1 -> nom du service = logstashHTH
la source
Mise à jour
J'utilisais généralement Docker Attach pour voir ce que STDOUT affichait, pour dépanner les conteneurs. Je viens de trouver
docker logs --follow 621a4334f97b
, ce qui me permet de voir le STDOUT tout en étant capable de le ctrl + c hors de lui sans affecter le fonctionnement du conteneur! Exactement ce que j'ai toujours voulu.... naturellement, vous devrez remplacer votre propre ID de conteneur.
Réponse originale
Je voulais laisser le conteneur fonctionner, mais je l'avais attaché sans démarrer le conteneur avec
-it
. Ma solution était de sacrifier ma connexion SSH à la place (puisque j'étais SSHed dans la machine qui exécutait les conteneurs). Tuer cette session ssh a laissé le conteneur intact mais m'en a détaché.la source