Ich habe einige komplexe Dinge mit Docker gemacht, aber wie sich herausstellt, weiß ich nicht, was -it
Flagge bedeutet. Kürzlich bin ich auf ein docker run
Befehlsbeispiel gestoßen, das mich ein wenig verwirrt hat.
docker run -itd ubuntu:xenial /bin/bash
Meine Frage ist, was Sinn macht zu schreiben -it
hier ein Flag , wenn der Container während der Instanziierung ausgeführt wirdbin/bash
In der Dokumentation haben wir ein Beispiel
docker run --name test -it debian
mit Erklärung
Das -it weist Docker an, ein Pseudo-TTY zuzuweisen, das mit dem Standard des Containers verbunden ist. Erstellen einer interaktiven Bash-Shell im Container.
und Erklärung für das Flag -t auf der Hilfeseite
-t, --tty Ordne ein Pseudo-TTY zu
wenn ich -it Flag während lösche
docker run -d ubuntu:xenial /bin/bash
Mein neu erstellter Container lebt nicht so viel
im docker ps -a
es wird als beendet bezeichnet
Entschuldigung, wenn meine Frage ziemlich dumm ist, kann ich im Internet keine Erklärung finden (ich habe ein erhebliches Missverständnis in diesem Punkt).
quelle
/bin/bash
auf stdin kein Inhalt verfügbar ist, müssen keine Befehle ausgeführt werden und der Benutzer kann nicht dazu aufgefordert werden, sodass er beendet wird. Dies ist 100% normales und erwartetes Verhalten.Antworten:
-it
ist kurz für,--interactive + --tty
wenn Siedocker run
mit diesem Befehl .. es würde Sie direkt in den Container führen ,, wo-d
kurz ist,--detach
was bedeutet, dass Sie nur den Container ausführen und dann von ihm trennen , so dass Sie im Grunde Container im Hintergrund ausführen .. bearbeiten: so Wenn Sie Docker-Container-itd
damit ausführen, werden die-it
Optionen ausgeführt und Sie vom Container getrennt, sodass Ihr Container auch ohne Standard-App im Hintergrund ausgeführt wird.quelle
CMD
Befehl. Daher wurde standardmäßig keine App ausgeführt. Wenn Sie es also im Hintergrund ausführen, wird es sofort beendet, da es keine Aufgabe zu erledigen hatte. .-i
). Wenn Befehle ausgeführt werden, die sich je nach TTY unterschiedlich verhalten, können Sie je nach Vorhandensein von TTY ein unterschiedliches Verhalten erzielen-t
./bin/bash </dev/null
sofort beendet, wenn Sie es ohne Docker ausführen.docker run
Ohne zu laufen bedeutet-i
dasselbe mit der Kopiebash
, die es startet. (Ohne-t
hat es ein stdin, aber kein TTY, so dass es sich nicht als interaktive Shell erkennt, so dass Sie ein etwas anderes Verhalten erhalten).docker run -it ubuntu:xenial /bin/bash
Startet den Container im interaktiven Modus (daher-it
Flag), mit dem Sie mit/bin/bash
dem Container interagieren können. Das heißt, jetzt haben Siebash
Session im Innern des Behälters, so können Siels
,mkdir
oder im Innern des Behälters jeden bash Befehl tun.Der Schlüssel hier ist das Wort "interaktiv". Wenn Sie das Flag weglassen, wird der Container weiterhin ausgeführt,
/bin/bash
aber sofort beendet. Mit dem Flag wird der Container ausgeführt/bin/bash
und wartet geduldig auf Ihre Eingabe.quelle
docker run -i ubuntu:xenial /bin/bash
-t
: pseudo tty oder "pseudo terminal". Ohne Terminal können Sie keine Eingaben an den Container senden.docker run -it ubuntu:xenial
Vielen Dank für die Antwort, aber ich werde auch eine Terminalsitzung mit diesem Befehl von Grund auf neu haben (für das, was ich dann brauche, um bin / bash auszuführen). Es wird auch eine Terminalsitzung erstellt-t
Tag kann man immer noch mit dem Container interagieren, aber mit ihm haben Sie ein schöneres Terminal mit mehr Funktionen. Sie können mit-i
und mit laufen-it
, um den Unterschied zu sehen.