Moby: سلوك طرفي غريب داخل عامل الإرساء

تم إنشاؤها على ٢٣ يونيو ٢٠١٧  ·  33تعليقات  ·  مصدر: moby/moby

عندما أقوم بالتنفيذ إلى / bin / bash داخل عامل ميناء (docker exec -ti container / bin / bash) وأبحث بشكل متكرر عن أمر ما ، في بعض الأحيان تبدأ المحطة الطرفية في التصرف بشكل غريب وكل شيء يفسد كما في الصورة.
بعد ذلك لا بد لي من الخروج من الحاوية والتنفيذ مرة أخرى.
selection_017

التعليق الأكثر فائدة

لقد اكتشفت أن هذا الخطأ يرجع بالفعل إلى معلمات عرض وارتفاع المحطة التي لا يتم توفيرها أحيانًا للحاوية باستخدام أمر docker exec

يمكنك قراءة المزيد عنها في هذا العدد: # 10341

لقد قمت بحل الخطأ بهذه الطريقة:

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

يمكنك أيضًا وضع هذا الأمر في نص برمجي وتوفير اسم الحاوية كمعامل وإنشاء اسم مستعار مثل docker-exec

ال 33 كومينتر

يتصرف 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 ..

image

عندما أقوم بتغيير حجم نافذة xshell ...
image

إعادة ضبط حجم exec tty بشكل صحيح ... يعرف أي شخص هذا السبب ، وكيف يقوم xshell بذلك ... لقد عملت في إصدار عامل ميناء أقل

image

مثال على إنشاء عامل ميناء لحل هذه المشكلة:

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) # ... 
}
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات