Was ist Docker Run -it Flag?

107

Ich habe einige komplexe Dinge mit Docker gemacht, aber wie sich herausstellt, weiß ich nicht, was -itFlagge bedeutet. Kürzlich bin ich auf ein docker runBefehlsbeispiel 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).

Alex
quelle
Wenn /bin/bashauf 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.
Charles Duffy

Antworten:

96

-itist kurz für, --interactive + --ttywenn Sie docker runmit diesem Befehl .. es würde Sie direkt in den Container führen ,, wo -dkurz ist, --detachwas 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 -itddamit ausführen, werden die -itOptionen ausgeführt und Sie vom Container getrennt, sodass Ihr Container auch ohne Standard-App im Hintergrund ausgeführt wird.

Fendi Jatmiko
quelle
Es ist keine richtige Antwort, da mein Container nach dem Ausführen ohne die Option -it gestoppt wird.
Alex
1
Das bedeutet, dass ein Fehler in Ihrem Container vorliegt. Ihr Container konnte also nicht gestartet werden. Oder er hatte standardmäßig keinen CMDBefehl. 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. .
Fendi Jatmiko
@Alex, wenn das Programm in Ihrem Container beim Schließen von stdin beendet wird, gibt es Ihre Antwort (warum es ohne nicht ausgeführt werden kann -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.
Charles Duffy
@Alex, ... und um klar zu sein, wird auch /bin/bash </dev/nullsofort beendet, wenn Sie es ohne Docker ausführen. docker runOhne zu laufen bedeutet -idasselbe mit der Kopie bash, die es startet. (Ohne -that es ein stdin, aber kein TTY, so dass es sich nicht als interaktive Shell erkennt, so dass Sie ein etwas anderes Verhalten erhalten).
Charles Duffy
1
@AdmiralAdama, was das Farbproblem behebt, ist die Option -t. TTY wird benötigt, um die Farbtoken zu verstehen.
Kroiz
41

docker run -it ubuntu:xenial /bin/bashStartet den Container im interaktiven Modus (daher -itFlag), mit dem Sie mit /bin/bashdem Container interagieren können. Das heißt, jetzt haben Siebash Session im Innern des Behälters, so können Sie ls, mkdiroder 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/bashaber sofort beendet. Mit dem Flag wird der Container ausgeführt /bin/bashund wartet geduldig auf Ihre Eingabe.

dvnguyen
quelle
1
für was brauche ich dann -t flag? docker run -i ubuntu:xenial /bin/bash
Alex
3
-t: pseudo tty oder "pseudo terminal". Ohne Terminal können Sie keine Eingaben an den Container senden.
dvnguyen
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
Alex
1
Du hast recht. Ich werde meine Worte zurücknehmen. Ohne -tTag kann man immer noch mit dem Container interagieren, aber mit ihm haben Sie ein schöneres Terminal mit mehr Funktionen. Sie können mit -iund mit laufen -it, um den Unterschied zu sehen.
dvnguyen
Ich kann keine Unterschiede finden. Danke für Ihr Bemühen!
Alex