Comment se détacher d’un conteneur Docker sans l’arrêter
Les conteneurs Docker ont un mode interactif qui vous permet d’attacher les flux d’entrée et de sortie de votre terminal au processus du conteneur. Appuyer sur Ctrl-C terminera généralement cette
processus, provoquant l’arrêt du conteneur. Voici pour se détacher d’une session sans arrêter le conteneur.
Sommaire
Se détacher sans s’arrêter
Docker prend en charge une combinaison de touches pour se détacher gracieusement d’un conteneur. Appuyez sur Ctrl-P, suivi de Ctrl-Q, pour vous déconnecter de votre connexion.
Vous serez ramené dans votre shell mais le processus précédemment attaché restera actif, gardant votre conteneur en cours d’exécution. Vous pouvez le vérifier en utilisant docker ps
pour obtenir une liste des conteneurs en cours d’exécution.
En appuyant sur Ctrl-C ou en exécutant le exit
La commande tuera généralement le processus de premier plan du conteneur à moins qu’il n’ait été spécialement configuré. Un conteneur Docker doit avoir un processus de premier plan en cours d’exécution ; un conteneur sans un entrera dans l’état arrêté.
Modification de la séquence de détachement du clavier
Vous pouvez modifier la séquence de détachement en fonction de vos préférences ou éviter un conflit avec les raccourcis clavier honorés par votre application. Ajouter un detachKeys
propriété à votre ~/.docker/config.json
fichier pour spécifier les clés que vous souhaitez utiliser.
Docker prend en charge le a-z
personnages et @
, ^
, et _
, symboles, ainsi que le signe crochet gauche ([
) et deux barres obliques inverses (). Ceux-ci sont tous utilisés en conjonction avec le
Ctrl-
clé; les lettres peuvent également être utilisées individuellement, sans Ctrl
.
Les séquences de touches sont exprimées sous forme de liste séparée par des virgules :
{ "detachKeys": "Ctrl-d,d" }
Cet exemple se détacherait du conteneur lorsque vous appuyez sur Ctrl-D
immédiatement suivi de la d
clé.
Modification de la séquence par conteneur
Au-delà de la modification de votre configuration globale, Docker accepte detachKeys
remplacements par conteneur et par pièce jointe. Ajouter le --detach-keys
flag aux commandes qui peuvent s’attacher aux processus de conteneur pour définir une séquence spécifique.
Les commandes qui le supportent sont :
docker run
docker start
docker exec
docker attach
Voici comment attacher à un conteneur, puis utiliser Ctrl-d
, suivi d’un trait de soulignement, pour détacher :
docker attach my-container --detach-keys="Ctrl-d,_"
Les --detach-keys
flag utilise le même format de séquence de touches que le detachKeys
option de configuration. Le drapeau prévaut sur votre docker.json
réglage; cela remplace à son tour la séquence Ctrl-P/Ctrl-Q par défaut de Docker.
Se détacher lorsque la séquence de clavier ne fonctionnera pas
Parfois, vous pouvez rencontrer un processus de conteneur qui refuse de se détacher, même lorsque vous exécutez la séquence de clavier. Cela peut arriver si le flux d’entrée du conteneur n’est pas connecté à votre terminal (-i
flag) ou il n’a pas de pseudo-TTY alloué (-t
drapeau). Vous pouvez également rencontrer ce problème si le processus de votre conteneur gère la séquence de touches de détachement et que vous ne l’avez pas remplacée lors de l’attachement.
Il est toujours possible de détacher votre terminal du conteneur dans ces circonstances. Vous devez ouvrir temporairement une autre fenêtre de shell et l’utiliser pour tuer le docker.attach
processus qui maintient la pièce jointe active.
Recherchez d’abord l’ID de processus du processus de pièce jointe :
ps -ef | grep attach
Utiliser la sortie de ps
pour identifier le docker.attach
processus que vous devez tuer. La commande dans le CMD
doit identifier la pièce jointe que vous recherchez. Notez le numéro PID correspondant et utilisez le kill
commande pour tuer ce processus :
kill -9 <PID>
Vous devriez voir votre shell d’origine se détacher de votre conteneur Docker et revenir à un état de fonctionnement normal. Vous pouvez maintenant fermer le deuxième shell et continuer à utiliser celui d’origine.
Cette technique fonctionne en tuant le processus Docker CLI qui a attaché le terminal au conteneur, et non le processus dans le conteneur qui le maintient en cours d’exécution. Votre terminal d’origine redevient utilisable et le conteneur reste en place.
Rattachement à votre conteneur
Vous pouvez rattacher aux conteneurs en utilisant le docker attach
commander. Cela attache automatiquement les flux d’entrée, de sortie et d’erreur de votre terminal au conteneur spécifié :
docker attach my-container
Les trois flux sont connectés par défaut. Vous pouvez omettre le flux d’entrée en passant le --no-stdin
drapeau. La sortie du conteneur sera diffusée dans votre terminal, mais vous ne pourrez fournir aucune entrée.
Utilisez à nouveau la séquence du clavier pour détacher, ou Ctrl-C
pour arrêter le processus et le conteneur. Si tu utilises Ctrl-C
ou exit
, docker attach
définira le $?
correctement dans votre shell afin que vous puissiez inspecter le code de sortie du conteneur.
Sommaire
La bonne façon de se détacher d’un conteneur Docker est une séquence de clavier assez obscure qui vous ramène dans votre shell. Vous pouvez personnaliser cette séquence pour augmenter la mémorisation et éviter tout conflit avec la gestion du clavier de votre conteneur.
Les séquences de détachement du clavier peuvent être inefficaces dans certaines circonstances. Il est toujours possible de se détacher de votre conteneur en identifiant et en tuant le processus qui prend en charge la pièce jointe. Commandes Unix régulières telles que ps
et kill
doit être utilisé dans ce scénario.
Enfin, si vous souhaitez que votre conteneur soit définitivement détaché, démarrez-le avec le -d
drapeau (docker run -d my-image:latest
). Cela enverra le conteneur directement en arrière-plan et n’émettra aucune sortie vers votre shell. Les conteneurs détachés sont toujours visibles à l’aide du docker ps
commande et peut être arrêté avec docker stop my-container
.