عندما أقوم بالتنفيذ إلى / bin / bash داخل عامل ميناء (docker exec -ti container / bin / bash) وأبحث بشكل متكرر عن أمر ما ، في بعض الأحيان تبدأ المحطة الطرفية في التصرف بشكل غريب وكل شيء يفسد كما في الصورة.
بعد ذلك لا بد لي من الخروج من الحاوية والتنفيذ مرة أخرى.
يتصرف Ctrl-P / Ctrl-N بشكل غريب في حالتي ومن المزعج التنقل عبر محفوظات shell. من المحتمل أننا قلقون من نفس المشكلة.
لقد لاحظت أيضًا أن التنقل عبر التاريخ باستخدام مفتاح up يعيد إنتاج هذا السلوك أحيانًا.
غالبًا ما أواجه مشكلات طرفية يبدو أنها تنزل إلى Docker دون معرفة حجم الجهاز الصحيح في البداية. يبدو أن هذا يحدث فقط على محطة جديدة. (قد يكون هذا هو سبب مشكلتك وقد لا يكون كذلك). على سبيل المثال:
$ 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.
لقد اكتشفت أن هذا الخطأ يرجع بالفعل إلى معلمات عرض وارتفاع المحطة التي لا يتم توفيرها أحيانًا للحاوية باستخدام أمر docker exec
يمكنك قراءة المزيد عنها في هذا العدد: # 10341
لقد قمت بحل الخطأ بهذه الطريقة:
docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash
يمكنك أيضًا وضع هذا الأمر في نص برمجي وتوفير اسم الحاوية كمعامل وإنشاء اسم مستعار مثل docker-exec
شكرا @ كرومات! أدى هذا إلى حل مشكلة كنت أواجهها باستخدام Docker for Windows في Bash على Windows حيث لم يكن الإخراج واسعًا بما يكفي نظرًا لعدم وجود TTY مناسب. يبدو أنه تم تنسيق backticks الخاصة بك في رمز ، لذا ها هو السطر مرة أخرى:
docker exec -t container_name /bin/bash -c "export COLUMNS=`tput cols`; export LINES=`tput lines`; exec bash"
لأي شخص قادم إلى هنا يبحث عن إجابة ، يمكنك العثور عليها هنا على موقع Stackoverflow
شكرا @ PhilT.
هذا ما نجح معي
docker exec -it container_name sh -c "stty rows 50 && stty cols 150 && bash"
شكرا! هذا حل لي أيضا!
بعد تجربة عشرات الحلول ، كان PhilT هو الحل
هذا هو النهج الصحيح. لا حاجة لمضاعفة exec لباش.
docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti container bash
حل eigood عمل مثل السحر في المحاولة الأولى ...
أنا استخدم أوبونتو مع جنوم. عادةً ما أقوم بتغيير حجم النافذة ويتم حل المشكلة بنفسها.
تغيير الحجم في جنوم هو Ctrl+Super+(Down Arrow)
ثم Ctrl+Super+(Up Arrow)
eigood شكرا لك على الحل الصحيح. لماذا لا يفعل Docker هذا فقط؟
PhilTcromat في حالتي أنا في حاجة إلى -i
الخيار كما في -it
بدلا من مجرد -t
الخيار.
لقد أنشأت اسمًا مستعارًا لجعل حياتي أسهل.
alias dexec='docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -ti $1'
على سبيل المثال:
dexec containername_service_1 bash
@ romulo1984 ما هو إصدار عامل
thaJeztah 17.12.0-ce
وصلت هذه النسخة إلى EOL في مارس ؛ أوصي بالتحديث إلى 18.06 (الإصدار الثابت الحالي) ، والذي يحتوي على إصلاح لذلك
تضمين التغريدة
أستطيع أن أؤكد أن هذه المشكلة قد تم حلها باستخدام Docker 18.06.
nodakai لدي نفس المشكلة مثلك: ليس لدي مشكلات في العرض أو أي شيء ، ولكن لن يتم إعادة رسم شيء Docker. على وجه التحديد ، إذا استخدمت ctrl-p و ctrl-n للتمرير عبر محفوظات bash (وهي عادتي) فلن يتم إعادة رسمها. إذا استخدمت مفاتيح الأسهم ، فإنها تفعل ذلك.
هل تمكنت من إيجاد طريقة للتغلب على هذه المشكلة؟
Grazfather أعتقد أن هذه مشكلة مختلفة. أعتقد أن المشكلة هناك تكمن في أن تسلسل المفاتيح المطلوب فصله عن الحاوية هو C-p C-q
، لذلك يرى عامل الشحن C-p
وينتظر C-q
أجل الفصل. لم أحاول فعلاً ، ولكن قد يكون استخدام --detach-keys=
مفيدًا.
لأي شخص قادم إلى هنا يبحث عن إجابة ، يمكنك العثور عليها هنا على موقع Stackoverflow
الإجابة المرتبطة هنا هي أفضل حل imo لأن الحلول الأخرى لا تعمل عند تبديل المستخدمين داخل الحاوية ، على افتراض أنك تريد بيئة المستخدم الجديد التي ستحل محل متغيرات بيئة LINES و COLUMNS.
أنا أستخدم xshell exec في Docker ..
عندما أقوم بتغيير حجم نافذة xshell ...
إعادة ضبط حجم exec tty بشكل صحيح ... يعرف أي شخص هذا السبب ، وكيف يقوم xshell بذلك ... لقد عملت في إصدار عامل ميناء أقل
مثال على إنشاء عامل ميناء لحل هذه المشكلة:
version: '3'
services:
php:
container_name: cmg-php
hostname: "docker-stand"
build:
context: ./
environment:
- COLUMNS=`tput cols`
- LINES=`tput lines`
ركز على البيئة. @ كرومات شكرا!
frops الحل الخاص بك غير صالح. يتم استخدام المفتاح environment
لتهيئة البيئة عند خطوة إنشاء الحاوية ، لذا فهو ليس الحل الصحيح. تحتاج إلى تعيين قيم البيئة المحيطة أثناء إدخال الحاوية ، وليس الإنشاء.
بالإضافة إلى ذلك ، كما قرأت haJeztah قال إنه تم إصلاحه في 18.06
من المؤكد أنه يجب تحسينه في 18.06 وما فوق ، ولكن لا تزال هناك بعض الحالات التي قد يلزم فيها تغيير الحجم (يمكنك القيام بذلك عن طريق تغيير حجم نافذة الجهاز) ؛ هناك طلب سحب يضيف حلقة إعادة المحاولة لتلك الحالات ، لكن لم يتم دمجها بعد ؛ https://github.com/docker/cli/pull/1529
كنت أفكر في تعيين COLUMNS
و LINES
كحل بديل لبعض المواقف ، ولكن ليس شيئًا يجب الاحتفاظ به في بيئتك
اكتشفت أن الخطأ لا يزال موجودًا في حالة التشغيل باستخدام --tty
وبدون --interactive
.
إصدار Docker 18.09.2 ، النسخة 6247962
مثال على التكاثر:
FROM debian
RUN apt-get update
RUN apt-get install -y sl
CMD /usr/games/sl
أمر مع إخراج مكسور / حجم طرف خاطئ:
docker run --rm --tty slimage
https://github.com/docker/cli/pull/1529 ليس بعد في `` Docker 18.09
من المتوقع أن يتم إصلاحه في 19.03.0 (10 يوليو 2019)
تم إرجاعه إلى Docker CLI 18.09.5 من خلال https://github.com/docker/cli/pull/1775
لا يزال معروضًا في أحدث نظام تشغيل Mac عند ترجمة openwrt باستخدام الأمر:
جعل menuconfig
وجميع الحلول المذكورة أعلاه لا تعمل مع نوافذ ncurses الفاسدة
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
لقد صنعت لنفسي تكوين VIM محمول مع جميع الإضافات الرائعة الخاصة بي للأناقة والتفتيش / التثبيت. حتى توصلت إلى حل cromat ، كان لدي دائمًا مشكلات في التخطيط مع VIM + NERDTree. الآن يعمل بشكل جيد. فقط جعلت نفسي اسمًا مستعارًا (وظيفة ، أحب الوظائف ولكن الشيء نفسه هنا).
$ vi ~/.zshrc
function vim {
docker run --env LINES=$(tput lines) --env COLUMNS=$(tput cols) # ...
}
التعليق الأكثر فائدة
لقد اكتشفت أن هذا الخطأ يرجع بالفعل إلى معلمات عرض وارتفاع المحطة التي لا يتم توفيرها أحيانًا للحاوية باستخدام أمر docker exec
يمكنك قراءة المزيد عنها في هذا العدد: # 10341
لقد قمت بحل الخطأ بهذه الطريقة:
يمكنك أيضًا وضع هذا الأمر في نص برمجي وتوفير اسم الحاوية كمعامل وإنشاء اسم مستعار مثل docker-exec