Die Ubuntu Dockerfile umfasst:
CMD ["/bin/bash"]
Das bedeutet, den Standard ENTRYPOINT
ist sh -c
(und ich bezweifle, tput line
funktioniert gut in einer sh
Sitzung, da tputterminfo
Datenbank verwendet, die nur in diesem Bild für bash gesetzt werden könnten)
Sie könnten versuchen, ENTRYPOINT
mit bash -c
zu überschreiben und überprüfen, ob das besser funktioniert.
, die nicht von der Kommandozeile obwohl funktioniert:
docker run --entrypoint /bin/bash --rm -it ubuntu:16.04 -i -c 'tput lines'
24
Ich werde die Möglichkeit der Definition eines benutzerdefinierten Bild überprüfen. obwohl
FROM ubuntu:16.04
ENTRYPOINT ["/bin/bash", "-c"]
Das Ergebnis ist das gleiche:
docker run --rm -it u 'tput lines'
24
Dies ist jedoch "Werke":
FROM ubuntu:16.04
ENTRYPOINT [ "/bin/bash" ]
mit:
[email protected]:/c/Users/vonc/prog/testsu$ docker run --rm -it u -i -c 'ls; tput lines'
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
48
Es könnte ein Synchronisierungsproblem sein, da derselbe Befehl 24 ausgibt von Zeit zu Zeit.
Eigentlich ist die folgende immer return "nicht 24" mit:
FROM ubuntu:16.04
ENTRYPOINT [ "/bin/bash", "-l", "-i", "-c" ]
docker run --rm -it u -c 'sleep 0.1; ls; tput lines'
48
Die OP silgon schlägt in the comments:
docker run --rm -it --entrypoint /bin/bash ubuntu:16.04 -c "sleep 0.1 && tput lines"
Als BMitch Kommentare below:
Angesichts des Erfolgs des Schlafes ist mein Verdacht, dass Andockfenster den Container mit dem Befehl running ausspioniert, und einmal den Client an den laufenden Container anhängt. Normalerweise etwas, das Millisekunden dauert.
Das bin ich eine andere Idee haben:
[email protected]:/c/Users/vonc/prog/testsu$
docker run --entrypoint='/bin/bash' --name ub -d -it ubuntu:16.04
0d9b8783afbb5e3ff4232da071d3f357985351ea1ce4d142bf6617ac456fb76b
[email protected]:/c/Users/vonc/prog/testsu$
d attach ub
[email protected]:/# tput lines
48
[email protected]:/# exit
exit
[email protected]:/c/Users/vonc/prog/testsu$ drmae
0d9b8783afbb5e3ff4232da071d3f357985351ea1ce4d142bf6617ac456fb76b
A tput lines
innerhalb einer angeschlossenen Sitzung funktioniert gut.
(Auf den drmae
alias finden Sie unter "How to remove old and unused Docker images")
thajeztah fügt in the comments:
der Container erstellt wird, dann mit den Standardeinstellungen (80x24
) gestartet, und danach (wenn -it
), eine Sitzung ist beigefügt.
Die Sitzung gibt die Größe des Terminals an;
Siehe "Resize a container TTY" API.
DEBU[0244] Calling POST /v1.25/containers/c42fd5c4eb79c06fd7f9912b8359022f7d93887afbb33b57a67ed8bb7bfee43a/resize?h=46&w=221
Weitere Informationen finden Sie unter docker issue 25450.
Es ist verwandt mit issue 10341 "Container create or start should accept height/width params". Aleksa Sarai (cyphar) fügt hinzu (September 2016):
Dies hat tatsächlich wieder in der Runtime-spec taucht (opencontainers/runtime-spec PR 563).
Da Windows die Möglichkeit erfordert, beim erstmaligen Start die Größe der Konsole festzulegen, können wir sie am Ende für alle Plattformen hinzufügen.
Die OP silgon Punkte, um den Code in api/client/container/run.go
:
// Telling the Windows daemon the initial size of the tty during start makes
// a far better user experience rather than relying on subsequent resizes
// to cause things to catch up.
if runtime.GOOS == "windows" {
hostConfig.ConsoleSize[0], hostConfig.ConsoleSize[1] = dockerCli.GetTtySize()
}
Mit der logischen Frage:
wäre es auch sinnvoll, auf Linux diese Eigenschaft zu verwenden, und setze die anfängliche Konsolengröße mit diesem Wert?
Kenfe-Mickaël Laventure (mlaventure
) ist auf, und ein neuer Patch es Docker 1.13 machen könnte.
Ihr Befehl funktioniert nicht (zumindest nicht für mich), wirft es den folgenden Fehler "Docker: Fehler Antwort von Daemon:/bin/bash -c: keine solche Datei oder Verzeichnis", das ist seltsam. Wie auch immer, basierend auf Ihrem Befehl konnte ich 'docker run --rm -it ubuntu: 16.04 bash -c" tput lines "' verwenden, also ändere ich 'sh -c' in'/bin/bash -C++, wie Sie gesagt haben . Dieser Befehl wird ausgeführt, gibt aber auch 24 als Ausgabe aus, die ich in meiner Frage angegeben habe. – silgon
@silgon Ja, ich bin gerade dabei, sie zu beheben – VonC
@silgon Ich lasse diese Antwort für jetzt, da ich denke, der Hauptunterschied zwischen Ihren Befehlen ist die Bash-Sitzung. Aber auch mit einem benutzerdefinierten Image gibt tput immer noch 24 – VonC