2016-10-29 4 views
2

HauptanliegenWann und wenn nicht tty verwenden in Docker Remote API

  • Ich benutze curl meine Anfragen auszuführen. Das Ausführen der Anfragen mit Postboten scheint nicht viel Unterschied zwischen TTY aktiviert oder deaktiviert zu zeigen.
  • Stderr zeigt mit TTY aktiviert, aber nicht mit TTY deaktiviert. AttachStderr wird für beide auf "True" gesetzt (mit curl).
  • Stdout ist 'unvollständig' mit TTY aktiviert (mit curl).

=========================================

Ich habe Mühe, herauszufinden, wann ein Pseudo-Tty mit Docker Remote API zugewiesen werden soll und wann nicht. Die Ausgabe ist sehr unterschiedlich (abhängig davon, ob es Fehler gab und andere Dinge, die ich nicht ganz verstehe).

Ich benutze curl, um meine Anfragen auszuführen.

Beispiel:

Kein TTY:

# ls on a container 
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d '{"AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Tty": false, "Cmd": [ "ls" ] }' http:/containers/mycontainer/exec 
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d '{"Detach": false, "Tty": true }' http:/exec/5b2a3882e04432180806deffd7d9417d9f75b439022bce16211c296beb158319/start 

Diese Ausgänge: bin boot dev etc exports home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

Gleiche Befehle mit Tty: true Ausgang boot etc home lib64 mnt proc run srv tmp varsr

Allerdings, wenn ich versuche, etwas zu tun, die eine schafft Fehler:

Kein TTY:

# ls /non/existant/path 
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d '{"AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Tty": false, "Cmd": [ "ls", "/non/existant/path" ] }' http:/containers/mycontainer/exec 
curl --unix-socket /var/run/docker.sock -s -H "Content-Type: application/json" -X POST -d '{"Detach": false, "Tty": true }' http:/exec/11d9bff545d99e64bc1c82b540966e2cceaa48c98fbde851378cdb5de9cae663/start 

Ohne TTY, ich sehe keinen Ausgang.

Mit TTY: ls: cannot access '/non/existant/path': No such file or directory

Was ist los?

Vielen Dank.

+0

Hatten Sie nicht gedacht, dass stdout/stderr anders behandelt werden? Versuchen Sie 'ls path/that/exists /> & 2' ebenfalls auszuführen ... – agg3l

+0

@ agg3l Sie haben recht, wenn ich zu stderr umleite, sehe ich keine Ausgabe mit deaktiviertem tty. Ich dachte jedoch, AttachStderr würde es zeigen. Ich habe auch keine Ahnung, warum tty: true die Ausgabe komisch aussehen lässt. Schließlich habe ich einen anderen Befehl ausgeführt, der kein stderr hatte und leer mit tty: false war. Ich werde es bald schreiben. –

+0

Scheint dies effektiv verschiebt Frage in _ "warum stdout ist verfügbar ohne TTY, während stderr nicht ist (beide sind dort mit TTY)" _...Nicht, dass ich deine Frage sofort beantworten kann. – agg3l

Antwort

0

Ich werde meine eigene Frage mit allem, was ich bisher weiß, beantworten, falls jemand das sieht.

TTY im Grunde wird die Ausgabe "aussehen", wie es in einem Terminal aussieht. Das heißt, wenn mehrere Ordner (in meinem Fall) vorhanden sind, sollten sie in zwei verschiedenen Zeilen angezeigt werden.

Ich weiß immer noch nicht, warum ich nicht stderr mit TTY deaktiviert sehen kann, aber das ist der Grund, dass ich nicht die volle stdout mit TTY aktiviert sehen kann.

Verwandte Themen