Cuando ejecuto a / bin / bash dentro de la ventana acoplable (docker exec -ti container / bin / bash) y busco de forma recursiva un comando, a veces la terminal comienza a comportarse de manera extraña y todo se estropea como en la imagen.
Después de eso, tengo que salir del contenedor y ejecutar de nuevo.
Ctrl-P / Ctrl-N se comportan de manera extraña en mi caso y es molesto navegar por el historial de shell. Es posible que estemos preocupados por el mismo problema.
También he notado que navegar por el historial con la tecla arriba a veces reproduce este comportamiento.
Con frecuencia tengo problemas de terminal que parecen deberse a que Docker no averigua cuál es el tamaño de terminal correcto inicialmente. Esto parece suceder solo en una terminal nueva. (Esto puede ser o no lo que está causando su problema). Por ejemplo:
$ 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.
Descubrí que este error se debe a los parámetros de ancho y alto de la terminal que a veces no se proporcionan al contenedor con el comando docker exec
Puede leer más sobre esto en este número: # 10341
He resuelto el error de esta manera:
docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash
También puede poner este comando en un script y proporcionar el nombre del contenedor como parámetro y crear un alias como docker-exec
¡Gracias @cromat! Esto resolvió un problema que tenía al usar Docker para Windows en Bash en Windows donde la salida no era lo suficientemente amplia debido a que no tenía un TTY adecuado. Parece que sus comillas invertidas se formatearon en código, así que aquí está la línea nuevamente:
docker exec -t container_name /bin/bash -c "export COLUMNS=`tput cols`; export LINES=`tput lines`; exec bash"
para cualquiera que venga aquí en busca de una respuesta, puede encontrarla aquí en stackoverflow
Gracias @PhilT.
Esto es lo que funcionó para mí.
docker exec -it container_name sh -c "stty rows 50 && stty cols 150 && bash"
¡Gracias! ¡Eso también resolvió el mío!
Después de probar una docena de soluciones, @PhilT 's fue la única que funcionó
Este es el enfoque más correcto. No es necesario un doble ejecutivo de bash.
docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash
La solución de @eigood funcionó a la
Yo uso ubuntu con gnome. Por lo general, cambio el tamaño de la ventana y el problema se resuelve solo.
Cambiar el tamaño en gnome es Ctrl+Super+(Down Arrow)
y luego Ctrl+Super+(Up Arrow)
@eigood Gracias por la solución correcta. ¿Por qué Docker no hace esto?
@PhilT @cromat En mi caso, necesito la opción -i
como en -it
lugar de solo la opción -t
.
Creé un alias para hacer mi vida más fácil.
alias dexec='docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti $1'
P.ej.:
dexec containername_service_1 bash
@ romulo1984 ¿qué versión de Docker está ejecutando? esto debería arreglarse en la versión actual
@thaJeztah 17.12.0-ce
Esa versión llegó a EOL en marzo; Recomiendo actualizar a 18.06 (versión estable actual), que tiene la solución para esto
@thaJeztah gracias.
Puedo confirmar que este problema se resuelve con Docker 18.06.
@nodakai Tengo el mismo problema que tú: no tengo problemas con el ancho ni nada, pero Docker algo no se vuelve a dibujar. Específicamente, si uso ctrl-p y ctrl-n para desplazarme por el historial de bash (que es mi hábito), no se vuelve a dibujar. Si utilizo las teclas de flecha, lo hace.
¿Conseguiste encontrar una forma de solucionar este problema?
@Grazfather Creo que ese es un tema diferente. Creo que el problema es que la secuencia de teclas para desconectar de un contenedor es C-p C-q
, por lo que la ventana acoplable ve su C-p
y está esperando el C-q
para desconectarse. En realidad no lo he intentado, pero podría ser que usar --detach-keys=
pueda ayudar.
para cualquiera que venga aquí en busca de una respuesta, puede encontrarla aquí en stackoverflow
La respuesta vinculada aquí es la mejor solución en mi opinión porque otras soluciones no funcionan cuando cambia de usuario dentro del contenedor, asumiendo que desea el entorno del nuevo usuario que sobrescribirá las variables de entorno LINES y COLUMNS.
Yo uso xshell exec en Docker ..
cuando cambio el tamaño de la ventana xshell ...
el tamaño de exec tty se restableció correctamente ... alguien sabe por qué, y cómo lo hace xshell ... Trabajé en una versión inferior de la ventana acoplable
Ejemplo de Docker-compose para resolver este problema:
version: '3'
services:
php:
container_name: cmg-php
hostname: "docker-stand"
build:
context: ./
environment:
- COLUMNS=`tput cols`
- LINES=`tput lines`
Centrarse en el medio ambiente. @cromat gracias!
@frops su solución no es válida. la clave environment
se usa para inicializar el entorno en el paso de creación de contenedor, por lo que no es la solución correcta. necesita valores de env establecidos durante la entrada del contenedor, no la creación.
además, como leí, @thaJeztah dijo que está arreglado en 18.06
Definitivamente debería mejorarse en 18.06 y versiones posteriores, pero todavía hay algunos casos en los que es posible que sea necesario volver a activar el cambio de tamaño (puede hacerlo cambiando el tamaño de la ventana de su terminal); hay una solicitud de extracción que agrega un bucle de reintento para esos casos, pero aún no se ha fusionado; https://github.com/docker/cli/pull/1529
Consideraría establecer COLUMNS
y LINES
una solución alternativa para algunas situaciones, pero no algo para mantener en su entorno
Encontré que el error todavía está presente si se ejecuta con --tty
y sin --interactive
.
Docker versión 18.09.2, compilación 6247962
Ejemplo para reproducir:
FROM debian
RUN apt-get update
RUN apt-get install -y sl
CMD /usr/games/sl
Comando con salida rota / tamaño de terminal incorrecto:
docker run --rm --tty slimage
https://github.com/docker/cli/pull/1529 aún no está en `Docker 18.09
se espera que se arregle en 19.03.0 (10 de julio de 2019)
Se volvió a portar a Docker CLI 18.09.5 a través de https://github.com/docker/cli/pull/1775
todavía se presenta en la última versión de Mac OS cuando se compila openwrt con el comando:
hacer menuconfig
y todas las soluciones anteriores no funcionan para las ventanas ncurses desordenadas
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
Hice yo mismo una configuración de VIM portátil con todos mis complementos de lujo para el estilo y el deshilachado / arreglo. Hasta que se me ocurrió la solución @cromat , siempre tuve problemas de diseño con VIM + NERDTree. Ahora funciona bien. Me acabo de hacer un alias (función, me gustan las funciones pero lo mismo aquí).
$ vi ~/.zshrc
function vim {
docker run --env LINES=$(tput lines) --env COLUMNS=$(tput cols) # ...
}
Comentario más útil
Descubrí que este error se debe a los parámetros de ancho y alto de la terminal que a veces no se proporcionan al contenedor con el comando docker exec
Puede leer más sobre esto en este número: # 10341
He resuelto el error de esta manera:
También puede poner este comando en un script y proporcionar el nombre del contenedor como parámetro y crear un alias como docker-exec