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.
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 ..
Wenn ich die GröĂe des xshell-Fensters Ă€ndere ...
exec tty size richtig zurĂŒckgesetzt ... jeder weiĂ warum und wie xshell es macht ... Ich habe an einer niedrigeren Docker-Version gearbeitet
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) # ...
}
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:
Sie können diesen Befehl auch in ein Skript einfĂŒgen und den Containernamen als Parameter angeben und einen Alias ââwie docker-exec erstellen