Moby: Seltsames Terminalverhalten im Docker

Erstellt am 23. Juni 2017  Â·  33Kommentare  Â·  Quelle: moby/moby

Wenn ich nach /bin/bash im Docker (docker exec -ti container /bin/bash) ausfĂŒhre und rekursiv nach einem Befehl suche, fĂ€ngt das Terminal manchmal an, sich seltsam zu verhalten und alles wird wie im Bild durcheinander gebracht.
Danach muss ich den Container verlassen und wieder ausfĂŒhren.
selection_017

Hilfreichster Kommentar

Ich habe herausgefunden, dass dieser Fehler tatsĂ€chlich auf die Parameter Breite und Höhe des Terminals zurĂŒckzufĂŒhren ist, die manchmal nicht mit dem Befehl docker exec fĂŒr den Container bereitgestellt werden

Mehr dazu lesen Sie in dieser Ausgabe: #10341

Ich habe den Fehler so behoben:

docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash

Sie können diesen Befehl auch in ein Skript einfĂŒgen und den Containernamen als Parameter angeben und einen Alias ​​wie docker-exec erstellen

Alle 33 Kommentare

Strg-P/Strg-N verhalten sich in meinem Fall seltsam und es ist nervig, durch den Shell-Verlauf zu navigieren. Es ist möglich, dass wir von dem gleichen Problem betroffen sind.

Mir ist auch aufgefallen, dass das Navigieren durch den Verlauf mit der AufwÀrtstaste dieses Verhalten manchmal reproduziert.

Ich habe hĂ€ufig Terminalprobleme, die darauf zurĂŒckzufĂŒhren zu sein scheinen, dass Docker nicht herausfindet, was die richtige TerminalgrĂ¶ĂŸe ist. Dies scheint nur auf einem neuen Terminal zu passieren. (Dies kann die Ursache Ihres Problems sein oder auch nicht.) Zum Beispiel:

$ docker exec -it foo /bin/bash
foo<strong i="6">@649fb21d747c</strong>:~$ stty size
0 0
foo<strong i="7">@649fb21d747c</strong>:~$ reset -w
foo<strong i="8">@649fb21d747c</strong>:~$ stty size
24 80
foo<strong i="9">@649fb21d747c</strong>:~$ # That was still wrong. Now resize the terminal to get a SIGWINCH.
foo<strong i="10">@649fb21d747c</strong>:~$ stty size
69 208
foo<strong i="11">@649fb21d747c</strong>:~$ exit
exit
$ docker exec -it foo /bin/bash # Try it again.
foo<strong i="12">@649fb21d747c</strong>:~$ stty size
69 208
foo<strong i="13">@649fb21d747c</strong>:~$ # Doesn't happen anymore for this session.

Ich habe herausgefunden, dass dieser Fehler tatsĂ€chlich auf die Parameter Breite und Höhe des Terminals zurĂŒckzufĂŒhren ist, die manchmal nicht mit dem Befehl docker exec fĂŒr den Container bereitgestellt werden

Mehr dazu lesen Sie in dieser Ausgabe: #10341

Ich habe den Fehler so behoben:

docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash

Sie können diesen Befehl auch in ein Skript einfĂŒgen und den Containernamen als Parameter angeben und einen Alias ​​wie docker-exec erstellen

Danke @cromat! Dies löste ein Problem, das ich bei der Verwendung von Docker fĂŒr Windows in Bash unter Windows hatte, bei dem die Ausgabe nicht breit genug war, weil sie kein richtiges TTY hatte. Es sieht so aus, als ob Ihre Backticks in Code formatiert wurden, also ist hier die Zeile noch einmal:

docker exec -t container_name /bin/bash -c "export COLUMNS=`tput cols`; export LINES=`tput lines`; exec bash"

FĂŒr alle, die hierher kommen und nach einer Antwort suchen, finden Sie sie hier auf stackoverflow

Danke @PhilT.

Das hat bei mir funktioniert.

docker exec -it container_name sh -c "stty rows 50 && stty cols 150 && bash"

Vielen Dank! Das hat meine auch gelöst!

Nachdem ich ein Dutzend Lösungen @PhilT die einzige, die funktionierte

Dies ist der richtigere Ansatz. Keine doppelte AusfĂŒhrung von bash erforderlich.

docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash

Die Lösung von @eigood funktionierte auf

Ich benutze Ubuntu mit Gnome. Normalerweise Ă€ndere ich die GrĂ¶ĂŸe des Fensters und das Problem ist von selbst behoben.
Die GrĂ¶ĂŸenĂ€nderung in Gnome ist Ctrl+Super+(Down Arrow) und dann Ctrl+Super+(Up Arrow)

@eigood Danke fĂŒr die richtige Lösung. Warum macht Docker das nicht einfach?

@PhilT @cromat In meinem Fall benötige ich die Option -i wie in -it anstelle der Option -t .

Ich habe einen Alias ​​erstellt, um mir das Leben zu erleichtern.

alias dexec='docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti $1'

Z.B.:

dexec containername_service_1 bash

@ romulo1984 Welche Docker-Version verwenden Sie? dies sollte in der aktuellen Version behoben sein

@thaJeztah 17.12.0-ce

Diese Version erreichte das EOL im MĂ€rz; Ich wĂŒrde empfehlen, auf 18.06 (aktuelle stabile Version) zu aktualisieren, die den Fix dafĂŒr enthĂ€lt

@thaJeztah danke.

Ich kann bestÀtigen, dass dieses Problem mit Docker 18.06 behoben wurde.

@nodakai Ich habe das gleiche Problem wie Sie: Ich habe keine Probleme mit der Breite oder so, aber Docker etwas wird nicht neu gezeichnet. Insbesondere wenn ich Strg-p und Strg-n verwende, um durch den Bash-Verlauf zu scrollen (was meine Gewohnheit ist), wird es nicht neu gezeichnet. Wenn ich die Pfeiltasten benutze, funktioniert es.

Konnten Sie dieses Problem umgehen?

@Grazfather Ich denke, das ist ein anderes Thema. Ich denke, das Problem besteht darin, dass die Tastenfolge zum Trennen von einem Container C-p C-q , also sieht Docker Ihre C-p und wartet auf die C-q um sich zu trennen. Ich habe es nicht wirklich versucht, aber es könnte sein, dass die Verwendung von --detach-keys= helfen könnte.

FĂŒr alle, die hierher kommen und nach einer Antwort suchen, finden Sie sie hier auf stackoverflow

Die hier verlinkte Antwort ist imo die beste Lösung, da andere Lösungen nicht funktionieren, wenn Sie Benutzer innerhalb des Containers wechseln, vorausgesetzt, Sie möchten die Umgebung des neuen Benutzers, die die Umgebungsvariablen LINES und COLUMNS ĂŒberschreibt.

Ich verwende xshell exec im Docker ..

image

Wenn ich die GrĂ¶ĂŸe des xshell-Fensters Ă€ndere ...
image

exec tty size richtig zurĂŒckgesetzt ... jeder weiß warum und wie xshell es macht ... Ich habe an einer niedrigeren Docker-Version gearbeitet

image

Docker-Compose-Beispiel zur Lösung dieses Problems:

version: '3'
services:
    php:
        container_name: cmg-php
        hostname: "docker-stand"
        build:
            context: ./
        environment:
            - COLUMNS=`tput cols`
            - LINES=`tput lines`

Fokus auf Umwelt. @cromat danke!

@frops Ihre Lösung ist ungĂŒltig. Der SchlĂŒssel environment wird verwendet, um die Umgebung beim Schritt zum Erstellen eines Containers zu initialisieren, daher ist dies keine richtige Lösung. Sie mĂŒssen env-Werte wĂ€hrend der Eingabe des Containers festlegen, nicht beim Erstellen.

Außerdem habe ich 18.06 behoben ist

Sollte definitiv in 18.06 und höher verbessert werden, aber es gibt immer noch FĂ€lle, in denen die GrĂ¶ĂŸenĂ€nderung möglicherweise erneut ausgelöst werden muss (Sie können dies tun, indem Sie die GrĂ¶ĂŸe Ihres Terminalfensters Ă€ndern); es gibt eine Pull-Anfrage, die fĂŒr diese FĂ€lle eine Wiederholungsschleife hinzufĂŒgt, aber sie ist noch nicht zusammengefĂŒhrt; https://github.com/docker/cli/pull/1529

Ich wĂŒrde in Betracht ziehen, COLUMNS und LINES als Workaround fĂŒr einige Situationen festzulegen, aber nicht etwas, das Sie in Ihrer Umgebung behalten können

Ich habe festgestellt, dass der Fehler immer noch vorhanden ist, wenn er mit --tty und ohne --interactive .
Docker-Version 18.09.2, Build 6247962

Beispiel zum Reproduzieren:

FROM debian
RUN apt-get update
RUN apt-get install -y sl
CMD /usr/games/sl

Befehl mit defekter Ausgabe / falscher TerminalgrĂ¶ĂŸe:
docker run --rm --tty slimage

https://github.com/docker/cli/pull/1529 ist noch nicht in `Docker 18.09

voraussichtlich behoben am 19.03.0 (10. Juli 2019)

Es wurde ĂŒber https://github.com/docker/cli/pull/1775 auf Docker CLI 18.09.5 zurĂŒckportiert

wird immer noch im neuesten Mac OS angezeigt, wenn openwrt mit dem Befehl kompiliert wird:
MenĂŒkonfiguration machen
und alle oben genannten Problemumgehungen funktionieren nicht fĂŒr die durcheinandergebrachten ncurses-Fenster

docker version

    Client: Docker Engine - Community
     Version:           19.03.1
     API version:       1.40
     Go version:        go1.12.5
     Git commit:        74b1e89
     Built:             Thu Jul 25 21:18:17 2019
     OS/Arch:           darwin/amd64
     Experimental:      false

    Server: Docker Engine - Community
     Engine:
      Version:          19.03.1
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.5
      Git commit:       74b1e89
      Built:            Thu Jul 25 21:17:52 2019
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          v1.2.6
      GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc:
      Version:          1.0.0-rc8
      GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
docker version

    Client: Docker Engine - Community
     Version:           19.03.1
     API version:       1.40
     Go version:        go1.12.5
     Git commit:        74b1e89
     Built:             Thu Jul 25 21:18:17 2019
     OS/Arch:           darwin/amd64
     Experimental:      false

    Server: Docker Engine - Community
     Engine:
      Version:          19.03.1
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.5
      Git commit:       74b1e89
      Built:            Thu Jul 25 21:17:52 2019
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          v1.2.6
      GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc:
      Version:          1.0.0-rc8
      GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683

Ich habe mir eine portable VIM-Konfiguration mit all meinen ausgefallenen Plugins fĂŒr Stil und Linting/Fixing erstellt. Bis ich auf die @cromat- Lösung kam, hatte ich immer Layoutprobleme mit VIM + NERDTree. Jetzt funktioniert es gut. Ich habe mir gerade einen Alias ​​gemacht (Funktion, ich mag Funktionen, aber hier das gleiche).

$ vi ~/.zshrc
function vim {
    docker run --env LINES=$(tput lines) --env COLUMNS=$(tput cols) # ... 
}
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen