Ketika saya exec ke /bin/bash inside docker (docker exec -ti container /bin/bash) dan mencari perintah secara rekursif, terkadang terminal mulai berperilaku aneh dan semuanya kacau seperti pada gambar.
Setelah itu saya harus keluar dari wadah dan masuk lagi.
Ctrl-P/Ctrl-N berperilaku aneh dalam kasus saya dan itu menjengkelkan untuk menavigasi melalui riwayat Shell. Mungkin saja kita bermasalah dengan masalah yang sama.
Saya juga memperhatikan bahwa menavigasi melalui riwayat dengan tombol atas terkadang mereproduksi perilaku ini.
Saya sering mengalami masalah terminal yang tampaknya disebabkan oleh Docker yang tidak mengetahui ukuran terminal yang tepat pada awalnya. Ini tampaknya hanya terjadi pada terminal baru. (Ini mungkin atau mungkin bukan penyebab masalah Anda.) Misalnya:
$ 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.
Saya telah menemukan bahwa bug ini memang karena parameter lebar dan tinggi terminal yang terkadang tidak disediakan untuk wadah dengan perintah docker exec
Anda dapat membaca lebih lanjut tentang itu di edisi ini: #10341
Saya telah menyelesaikan bug dengan cara ini:
docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash
Anda juga dapat meletakkan perintah ini dalam skrip dan memberikan nama wadah sebagai parameter dan membuat alias seperti docker-exec
Terima kasih @cromat! Ini memecahkan masalah yang saya alami menggunakan Docker untuk Windows di Bash pada Windows di mana outputnya tidak cukup lebar karena tidak memiliki TTY yang tepat. Sepertinya backtick Anda diformat menjadi kode, jadi inilah barisnya lagi:
docker exec -t container_name /bin/bash -c "export COLUMNS=`tput cols`; export LINES=`tput lines`; exec bash"
bagi siapa pun yang datang ke sini mencari jawaban, Anda dapat menemukannya di sini di stackoverflow
Terima kasih @PhilT.
Inilah yang berhasil untuk saya.
docker exec -it container_name sh -c "stty rows 50 && stty cols 150 && bash"
Terima kasih! Itu juga memecahkan masalah saya!
Setelah mencoba selusin solusi @PhilT adalah satu-satunya yang berhasil
Ini adalah pendekatan yang lebih tepat. Tidak perlu double-exec bash.
docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash
Solusi @eigood bekerja seperti pesona pada percobaan pertama ...
Saya menggunakan ubuntu dengan gnome. Biasanya saya mengubah ukuran jendela dan masalah teratasi sendiri.
Mengubah ukuran di gnome adalah Ctrl+Super+(Down Arrow)
dan kemudian Ctrl+Super+(Up Arrow)
@eigood Terima kasih atas solusi yang benar. Mengapa Docker tidak melakukan ini saja?
@PhilT @cromat Dalam kasus saya, saya membutuhkan opsi -i
seperti pada -it
bukan hanya opsi -t
.
Saya membuat alias untuk membuat hidup saya lebih mudah.
alias dexec='docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti $1'
Misalnya.:
dexec containername_service_1 bash
@romulo1984 versi buruh pelabuhan apa yang Anda jalankan? ini harus diperbaiki di versi saat ini
@thaJeztah 17.12.0-ce
Versi itu mencapai EOL pada bulan Maret; Saya akan merekomendasikan memperbarui ke 18,06 (rilis stabil saat ini), yang memiliki perbaikan untuk ini
@thaJeztah terima kasih.
Saya dapat mengonfirmasi bahwa masalah ini telah diselesaikan dengan Docker 18.06.
@nodakai Saya memiliki masalah yang sama dengan Anda: Saya tidak memiliki masalah dengan lebar atau apa pun, tetapi Docker sesuatu tidak akan digambar ulang. Secara khusus, jika saya menggunakan ctrl-p dan ctrl-n untuk menelusuri riwayat bash (yang merupakan kebiasaan saya), itu tidak menggambar ulang. Jika saya menggunakan tombol panah, itu benar.
Apakah Anda berhasil menemukan cara untuk mengatasi masalah ini?
@Grazfather Saya pikir itu masalah yang berbeda. Saya pikir masalahnya adalah bahwa urutan kunci untuk melepaskan dari wadah adalah C-p C-q
, jadi buruh pelabuhan melihat C-p
dan menunggu C-q
untuk melepaskan. Saya belum benar-benar mencoba, tetapi mungkin menggunakan --detach-keys=
dapat membantu.
bagi siapa pun yang datang ke sini mencari jawaban, Anda dapat menemukannya di sini di stackoverflow
Jawaban yang ditautkan ke sini adalah solusi terbaik karena solusi lain tidak berfungsi ketika Anda mengganti pengguna di dalam wadah, dengan asumsi Anda menginginkan lingkungan pengguna baru yang akan menimpa variabel lingkungan LINES dan COLUMNS.
Saya menggunakan xshell exec di buruh pelabuhan ..
ketika saya mengubah ukuran jendela xshell ...
exec tty size reset dengan benar ... ada yang tahu mengapa ini, dan bagaimana xshell melakukannya ... Saya bekerja di versi buruh pelabuhan yang lebih rendah
Contoh penulisan Docker untuk menyelesaikan masalah ini:
version: '3'
services:
php:
container_name: cmg-php
hostname: "docker-stand"
build:
context: ./
environment:
- COLUMNS=`tput cols`
- LINES=`tput lines`
Fokus pada lingkungan. @cromat terima kasih!
@frops solusi Anda tidak valid. kunci environment
digunakan untuk menginisialisasi lingkungan pada langkah membuat wadah, jadi itu bukan solusi yang benar. anda perlu menetapkan nilai env selama wadah masuk, bukan membuat.
selain itu, saat saya membaca @thaJeztah mengatakan sudah diperbaiki pada 18.06
Pasti harus ditingkatkan di 18.06 dan lebih tinggi, tetapi masih ada beberapa kasus di mana pengubahan ukuran mungkin perlu dipicu kembali (Anda dapat melakukannya dengan mengubah ukuran jendela terminal Anda); ada permintaan tarik yang menambahkan pengulangan percobaan untuk kasus tersebut, tetapi belum digabungkan; https://github.com/docker/cli/pull/1529
Saya akan mempertimbangkan untuk menetapkan COLUMNS
dan LINES
sebagai solusi untuk beberapa situasi, tetapi bukan sesuatu untuk disimpan di lingkungan Anda
Saya menemukan bug masih ada jika dijalankan dengan --tty
dan tanpa --interactive
.
Docker versi 18.09.2, build 6247962
Contoh untuk mereproduksi:
FROM debian
RUN apt-get update
RUN apt-get install -y sl
CMD /usr/games/sl
Perintah dengan output rusak/ukuran terminal salah:
docker run --rm --tty slimage
https://github.com/docker/cli/pull/1529 belum ada di `Docker 18.09
diharapkan akan diperbaiki pada 19.03.0 (10 Juli 2019)
Itu kembali porting ke Docker CLI 18.09.5 melalui https://github.com/docker/cli/pull/1775
masih hadir di Mac OS terbaru saat mengkompilasi openwrt dengan perintah:
buat konfigurasi menu
dan semua solusi di atas tidak berfungsi untuk jendela ncurses yang kacau
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
Saya membuat sendiri konfigurasi VIM portabel dengan semua plugin mewah saya untuk gaya dan linting/perbaikan. Sampai saya menemukan solusi @cromat, saya selalu memiliki masalah tata letak dengan VIM + NERDTree. Sekarang bekerja dengan baik. Baru saja menjadikan diri saya alias (fungsi, saya suka fungsi tetapi hal yang sama di sini).
$ vi ~/.zshrc
function vim {
docker run --env LINES=$(tput lines) --env COLUMNS=$(tput cols) # ...
}
Komentar yang paling membantu
Saya telah menemukan bahwa bug ini memang karena parameter lebar dan tinggi terminal yang terkadang tidak disediakan untuk wadah dengan perintah docker exec
Anda dapat membaca lebih lanjut tentang itu di edisi ini: #10341
Saya telah menyelesaikan bug dengan cara ini:
Anda juga dapat meletakkan perintah ini dalam skrip dan memberikan nama wadah sebagai parameter dan membuat alias seperti docker-exec