Dans Docker 1.1.2 (dernière), quelle est la bonne façon de se détacher d'un conteneur sans l'arrêter?
Ainsi, par exemple, si j'essaie:
docker run -i -t foo /bin/bash
oudocker attach foo
(pour le conteneur déjà en cours d'exécution)
qui me conduisent tous les deux à un terminal dans le conteneur, comment puis-je quitter le terminal du conteneur sans l'arrêter?
exit
et les CTR+C
deux arrêtent le conteneur.
Réponses:
Mise à jour: Comme mentionné dans les réponses ci-dessous Ctrl+ p, Ctrl+ qtransformera désormais le mode interactif en mode démon.
Eh bien Ctrl+ C(ou Ctrl+ \) devrait vous détacher du conteneur mais cela tuera le conteneur car votre processus principal est un bash.
Une petite leçon sur le docker. Le conteneur n'est pas un véritable système d'exploitation complet. Lorsque vous exécutez un conteneur, le processus que vous lancez prend le PID 1 et prend la puissance d'initialisation. Donc, lorsque ce processus est terminé, le démon arrête le conteneur jusqu'à ce qu'un nouveau processus soit lancé (via le démarrage du docker) (Plus d'explications à ce sujet http://phusion.github.io/baseimage-docker/#intro )
Si vous voulez un conteneur qui fonctionne en mode détaché tout le temps, je vous suggère d'utiliser
Avec un serveur ssh sur le conteneur. (le moyen le plus simple est de suivre le tutoriel de dockerizing openssh https://docs.docker.com/engine/examples/running_ssh_service/ )
Ou vous pouvez simplement relancer votre conteneur via
(il sera détaché par défaut)
la source
-ti -d
, puis attachez avecdocker attach
, puis détachez avec d' abord ctrl + p puis ctrl + q. Je pensais que je pouvais utiliser un seul des raccourcis clavier.Tapez Ctrl+ ppuis Ctrl+ q. Il vous aidera à passer du mode interactif au mode démon.
Voir https://docs.docker.com/v1.7/articles/basics/#running-an-interactive-shell .
la source
J'ai creusé cela et toutes les réponses ci-dessus sont partiellement correctes. Tout dépend de la façon dont le conteneur est lancé. Cela se résume à ce qui suit lorsque le conteneur a été lancé:
-t
)-i
)^P^Q
fonctionne, MAIS uniquement lorsque-t
et-i
est utilisé pour lancer le conteneur:ctrl+c
fonctionne, MAIS uniquement lorsque-t
( sans-i
) est utilisé pour lancer le conteneur:La troisième façon de se détacher
Il existe cependant un moyen de se détacher sans tuer le conteneur; vous avez besoin d'un autre shell. En résumé, exécuter ceci dans un autre shell détaché et laisser le conteneur en cours d'exécution
pkill -9 -f 'docker.*attach'
:Pourquoi? Parce que vous tuez le processus qui vous a connecté au conteneur, pas le conteneur lui-même.
la source
kill -9
signal ne fonctionne pas. Le processus est terminé et n'a aucun recours. Je suppose que d'autres signaux donnent au conteneur une chance de s'arrêter, alors que ce-9
n'est pas le cas.Si vous faites "docker attach" id du conteneur "vous entrez dans le conteneur. Pour sortir du conteneur sans arrêter le conteneur, vous devez entrer Ctrl+ P+Q
la source
Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
Je considère que la réponse d'Ashwin est la plus correcte, mon ancienne réponse est ci-dessous.
Je voudrais ajouter une autre option ici qui consiste à exécuter le conteneur comme suit
Vous pouvez ensuite entrer dans le conteneur et exécuter bash avec
Pas besoin d'installer sshd :)
la source
docker attach
serait plus standard, en se rattachant à la première exécution de bash.docker exec
fonctionne également ici, mais il crée un nouveau processus bash en plus du premier. Bien sûr, le processus est créé dans le même contexte / environnement / conteneur que le premier, mais il est différent (une analogie serait d'ouvrir un nouvel onglet de terminal dans votre émulateur de terminal préféré).La méthode par défaut pour se détacher d'un conteneur interactif est Ctrl+ P Ctrl+ Q, mais vous pouvez le remplacer lors de l'exécution d'un nouveau conteneur ou de l'attachement à un conteneur existant à l' aide de l'indicateur --detach-keys .
la source
Si vous vous êtes connecté
docker attach
, vous pouvez vous détacher en tuant le processus de connexion du docker. Le meilleur moyen est d'utiliser le paramètre sig-proxy pour éviter de passer le Ctrl + C à votre conteneur:La même option est disponible pour la
docker run
commande.la source
php:7.3-apache
Si vous voulez simplement voir la sortie du processus s'exécuter à partir du conteneur, vous pouvez faire un simple
docker container logs -f <container id>
.L'
-f
indicateur fait en sorte que la sortie du conteneur soitfollowed
mise à jour en temps réel. Très utile pour le débogage ou la surveillance.la source
Vous pouvez utiliser l'
--detach-keys
option lorsque vous exécutezdocker attach
pour remplacer la séquence CTRL+ P, CTRL+ par défaut Q(qui ne fonctionne pas toujours).Par exemple, lorsque vous exécutez
docker attach --detach-keys="ctrl-a" test
et que vous appuyez sur CTRL+, Avous quittez le conteneur sans le tuer.Autres exemples:
docker attach --detach-keys="ctrl-a,x" test
- appuyez surCTRL+A
puis surX
pour quitterdocker attach --detach-keys="a,b,c" test
- appuyez surA
, puisB
, puisC
pour quitterExtrait de la documentation officielle:
Si vous le souhaitez, vous pouvez configurer un remplacement de la séquence de touches Docker pour le détachement. Cela est utile si la séquence par défaut de Docker entre en conflit avec la séquence de touches que vous utilisez pour d'autres applications. Il existe deux façons de définir votre propre séquence de touches de détachement, en tant que remplacement par conteneur ou en tant que propriété de configuration sur l'ensemble de votre configuration.
Pour remplacer la séquence d'un conteneur individuel, utilisez l'
--detach-keys="<sequence>"
indicateur avec la commande docker attach. Le format du<sequence>
est soit une lettre[a-Z]
, soit lectrl-
combiné avec l'un des éléments suivants:Ces
a
,ctrl-a
,X
ou lesctrl-\\
valeurs sont tous des exemples de séquences de clés valides. Pour configurer une séquence de touches de configuration par défaut différente pour tous les conteneurs, voir la section Fichier de configuration .Remarque: cela fonctionne depuis la version 1.10+ de docker (au moment de cette réponse, la version actuelle est 18.03)
la source
Ancien message, mais quittez puis redémarrez-le ... le problème est que si vous êtes sur une machine Windows Ctrl p ou Ctrl P sont liés pour imprimer ... quitter le début du conteneur ne devrait rien faire de mal
la source