Je faisais des choses complexes avec docker, mais je ne sais pas ce que -it
signifie le drapeau. Récemment, je suis tombé sur un exemple de docker run
commandement qui m'a un peu dérouté.
docker run -itd ubuntu:xenial /bin/bash
Ma question est de savoir quel est le sens d'écrire un -it
indicateur ici, si le conteneur pendant l'exécution de l'instanciationbin/bash
Dans la documentation, nous avons un exemple
docker run --name test -it debian
avec explication
-It demande à Docker d'allouer un pseudo-TTY connecté au stdin du conteneur; créer un shell bash interactif dans le conteneur.
et explication de l'indicateur -t de la page d'aide
-t, --tty Allouer un pseudo-TTY
si je supprime l'indicateur -it pendant
docker run -d ubuntu:xenial /bin/bash
mon conteneur nouvellement créé ne vit pas tellement
dans docker ps -a
il est désigné comme sorti
Désolé, si ma question est assez stupide, je ne trouve pas d'explication sur Internet (j'ai un malentendu important sur ce point).
la source
/bin/bash
aucun contenu n'est disponible sur stdin, il n'a aucune commande à exécuter et aucun moyen d'inviter l'utilisateur, il se ferme donc. Il s'agit d'un comportement normal et attendu à 100%.Réponses:
-it
est l'abréviation de--interactive + --tty
lorsque vous utilisezdocker run
cette commande .. cela vous mènerait directement à l'intérieur du conteneur ,, où-d
est court pour--detach
ce qui signifie que vous exécutez simplement le conteneur, puis que vous vous en détachez donc fondamentalement, vous exécutez le conteneur en arrière-plan .. edit: donc si vous exécutez le conteneur docker avec-itd
lui, les-it
options seront exécutées et vous détacheront du conteneur, de sorte que votre conteneur fonctionne toujours en arrière-plan, même sans application par défaut à exécuter.la source
CMD
commande par défaut ,, donc il n'a pas exécuté d'application par défaut. .so si vous l'exécutez en arrière-plan, il se fermait immédiatement car il n'avait aucun travail à faire. .-i
). De même, s'il exécute des commandes qui se comportent différemment en fonction de l'existence ou non d'un TTY, vous pouvez obtenir un comportement distinct en fonction de la présence de-t
./bin/bash </dev/null
quitte immédiatement aussi, si vous l'exécutez sans Docker. Courirdocker run
sans,-i
c'est faire la même chose avec la copie debash
celle qu'elle démarre. (Sans-t
, il a un stdin mais pas un TTY, donc il ne se détecte pas comme un shell interactif, donc vous obtenez un ensemble de comportements légèrement différent).docker run -it ubuntu:xenial /bin/bash
démarre le conteneur en mode interactif (donc-it
drapeau) qui vous permet d'interagir avec/bin/bash
le conteneur. Cela signifie que maintenant vous aurez labash
session à l' intérieur du conteneur, de sorte que vous pouvezls
,mkdir
ou faire une commande bash à l' intérieur du conteneur.La clé ici est le mot «interactif». Si vous omettez l'indicateur, le conteneur s'exécute toujours
/bin/bash
mais se ferme immédiatement. Avec le drapeau, le conteneur s'exécute/bin/bash
puis attend patiemment votre saisie.la source
docker run -i ubuntu:xenial /bin/bash
-t
: pseudo tty, ou "pseudo terminal". Sans terminal, vous ne pouvez pas envoyer d'entrées au conteneur.docker run -it ubuntu:xenial
merci pour la réponse, mais j'aurai également une session de terminal avec cette commande à partir de zéro (pour ce dont j'ai besoin d'exécuter bin / bash alors). Il crée également une session de terminal-t
balise, on peut toujours interagir avec le conteneur, mais avec lui, vous aurez un terminal plus agréable et plus de fonctionnalités. Vous pouvez courir avec-i
et avec-it
pour voir la différence.