GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

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 mettra généralement fin à ce
processus, provoquant l'arrêt du conteneur. Voici pour se détacher d'une session sans arrêter le conteneur.

Détacher sans s'arrêter

Docker prend en charge une combinaison de clavier pour se détacher gracieusement d'un conteneur. Appuyez sur Ctrl-P, suivi de Ctrl-Q, pour vous détacher de votre connexion.

Vous serez renvoyé dans votre shell, mais le processus précédemment attaché restera actif, gardant votre conteneur en cours d'exécution. Vous pouvez vérifier cela en utilisant docker ps pour obtenir une liste des conteneurs en cours d'exécution.

En appuyant sur Ctrl-C ou en exécutant la 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 conteneur 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 caractères 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 du d clé.

Modification de la séquence par conteneur

Au-delà de la modification de votre configuration globale, Docker accepte les detachKeys remplacements par conteneur et par pièce jointe. Ajoutez le --detach-keys indicateur aux commandes pouvant être attachées aux processus de conteneur pour définir une séquence spécifique.

Les commandes qui prennent en charge ceci sont :

  • docker run
  • docker start
  • docker exec
  • docker attach

Voici comment attacher à un conteneur, puis utiliser Ctrl-d , suivi d'un trait de soulignement, à 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 detachKeys option de configuration. Le drapeau remplace votre docker.json paramètre; cela remplace à son tour la séquence Ctrl-P/Ctrl-Q par défaut de Docker.

Se détacher lorsque la séquence du clavier ne fonctionne pas

Parfois, vous pouvez rencontrer un processus de conteneur qui refuse de se détacher, même lorsque vous émettez la séquence 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 la connexion.

Il est toujours possible de détacher votre terminal du conteneur dans ces circonstances. Vous devez ouvrir temporairement une autre fenêtre 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 colonne doit identifier la pièce jointe que vous recherchez. Notez le numéro PID pertinent et utilisez le kill commande pour tuer ce processus :

kill -9 <PID>

Vous devriez voir votre coque 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 borne d'origine redevient utilisable et le conteneur reste en place.

Rattachement à votre conteneur

Vous pouvez vous rattacher aux conteneurs à l'aide du docker attach commande. 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 clavier pour détacher, ou Ctrl-C pour arrêter le processus et le conteneur. Si vous utilisez Ctrl-C ou exit , docker attach définira le $? correctement dans votre shell afin que vous puissiez inspecter le code de sortie du conteneur.

Résumé

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 flag (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 et peut être arrêté avec docker stop my-container .


Docker
  1. Comment installer WordPress avec Docker

  2. Comment exécuter MySQL dans un conteneur Docker

  3. Comment attribuer une adresse IP statique à un conteneur Docker

  4. Comment répertorier les conteneurs Docker

  5. Comment quitter un conteneur Docker

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment inspecter le contenu d'une image Docker sans démarrer un conteneur

Comment exécuter Grafana dans un conteneur Docker

Comment créer une image Docker à partir d'un conteneur en cours d'exécution

Comment configurer un conteneur Apache Docker

Comment exécuter des conteneurs Docker