2015-05-09 9 views

Antwort

46

Das Argument "-t" ist laut einer Google-Suche NICHT gut dokumentiert oder wird von vielen Leuten oft erwähnt.

Es wird nicht einmal angezeigt, wenn Sie eine Liste von (was sein sollte) alle Docker-Client-Argumente durch Eingabe von "Docker" an der Bash-Eingabeaufforderung (mit der neuesten Version von 1.8.1).

In der Tat, wenn Sie versuchen, spezifische Hilfe zu diesem Argument zu erhalten, indem Sie „Docker -t --help“, wenn diese erstaunlich vage Antwort gibt:

„Flag angegeben, aber nicht definiert: -t“

Sie können also nicht dafür verantwortlich gemacht werden, über dieses Argument verwirrt zu sein!

Es gibt eine Erwähnung in der Online-Dokumention Docker, die sagen, es ist „ein Pseudo-tty Weisen“ und oft mit -i verwendet wird:

https://docs.docker.com/reference/run/

Ich sah es in der Dokumentation für der schreckliche jwilder/nginx-proxy Andockfensters Behälter in der folgenden Art und Weise:

docker run -d -p 80:80 --name nginx -v /tmp/nginx:/etc/nginx/conf.d -t nginx 

in diesem Fall, was es tut, wird die Ausgabe auf die ‚virtuelle‘ TTY (Bash Eingabeaufforderung/terminal) innerhalb dieses Andockfensters Behälters senden. Sie können diese Ausgabe dann sehen, indem Sie den docker-Befehl "docker logs CONTAINER" ausführen, wobei CONTAINER die ersten paar Zeichen der ID dieses Containers sind. Diese CONTAINER-ID kann durch Eingabe von "docker ps -a"

gefunden werden. Ich habe dieses Argument "-t" im folgenden Link kurz erwähnt, wo es heißt: "Die Flags -t und -i weisen ein Pseudo zu -tty und halten Sie stdin offen, auch wenn sie nicht angehängt ist. Dadurch können Sie den Container wie eine herkömmliche VM verwenden, solange die Bash-Eingabeaufforderung ausgeführt wird. "

https://coreos.com/os/docs/latest/getting-started-with-docker.html

Ich hoffe, das hilft! Ich bin nicht sicher, warum dies nicht dokumentiert oder viel verwendet wird. Vielleicht ist es experimentell und wird als eine dokumentierte Funktion in kommenden Versionen implementiert werden.

+11

Die Dokumentation zeigt sich für 'Docker Lauf --help', nicht' Docker -t --help': '-t, --tty = false Vergeben einer pseudo-tty' " – bskaggs

7

Was ich über die -t wissen, ist die folgende:

docker exec -ti CONTAINER bash - mir erlaubt, in den Behälter auf "login". Es fühlt sich an wie ein Ssh-Ing (das ist es nicht).

Aber das Problem war, als ich eine Datenbank wiederherstellen wollte.

Normalerweise mache ich docker exec -ti mysql.5.7 mysql - Hier führe ich den mysql Befehl im Container aus und bekomme ein interaktives Terminal.

Ich habe <dump.sql zum vorherigen Befehl hinzugefügt, damit ich eine db wiederherstellen kann. Aber es ist mit cannot enable tty mode on non tty input gescheitert.

Entfernen der -t geholfen.Verstehe immer noch nicht warum:

docker exec -i mysql.5.7 mysql < dump.sql 

Der letzte funktioniert. Hoffe, das hilft den Menschen.

43

Die Option "-t" bezieht sich auf die Handhabung von Terminalzugriff durch Unix/Linux. In der Vergangenheit war ein Terminal eine Hardline-Verbindung, später eine Modem-basierte Verbindung. Diese hatten physische Gerätetreiber (sie waren echte Geräte). Sobald verallgemeinerte Netzwerke verwendet wurden, wurde ein Pseudo-Terminal-Treiber entwickelt. Dies liegt daran, dass es eine Trennung zwischen dem Verständnis dessen, was Terminal-Fähigkeiten verwendet werden können, ohne dass es direkt in Ihr Programm geschrieben werden muss, schafft (lesen Sie Manpages unter stty, curses).

Also, als Hintergrund, führen Sie einen Container ohne Optionen und standardmäßig haben Sie einen Stdout-Stream (so funktioniert docker run | <cmd> funktioniert); renne mit "-i", und du bekommst einen Standard-Stream hinzugefügt (so funktioniert <cmd> | docker run -i funktioniert); Verwenden Sie "-t", normalerweise in der Kombination "-it", und Sie haben einen Terminal-Treiber hinzugefügt, der, wenn Sie mit dem Prozess interagieren, wahrscheinlich ist, was Sie wollen. Es lässt den Container im Grunde wie eine Terminalverbindungssitzung aussehen.

1

Das -it weist Docker an, ein Pseudo-TTY zuzuweisen, das mit der Standardeingabe des Containers verbunden ist, wodurch eine interaktive Bash-Shell im Container erstellt wird.

--interactive, -i false Keep STDIN open even if not attached 

--tty, -t false Allocate a pseudo-TTY 

https://docs.docker.com/engine/reference/commandline/run/