Moby: الإخراج الافتراضي "docker ps" كبير جدًا

تم إنشاؤها على ٨ أغسطس ٢٠١٤  ·  83تعليقات  ·  مصدر: moby/moby

screenshot 2014-08-07 16 27 38

من الصعب جدًا قراءة الإخراج من docker ps على محطات عرض 80 حرفًا.

/bin/ps بعمل جيد جدًا في تغليف المخرجات على محطات ضيقة (على سبيل المثال ، وضع المعلومات المهمة أولاً ، ثم الأمر في النهاية ثم اقتطاعها). أتساءل عما إذا كان بإمكاننا القيام بعمل أفضل.

arecli exbeginner kinenhancement kinfeature

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

ما الخطأ في توصيل الأنابيب إلى جهاز النداء؟

docker ps | less -S

ال 83 كومينتر

الكثير من الحب والعديد من +1. أنا أستخدم محطات 80x24 (مما يثير استياء
زملائي) وكان هذا مصدر إزعاج طفيف بالنسبة لي بالنسبة للبعض
زمن.

لا بد لي من القول أن هذا كثيرا ما يجعلني أيضا.

أي أفكار لحل؟ يبدو وجود إصدار أصغر على محطات ضيقة أمرًا رائعًا.

حسنًا ، لا يلزم وجود بطاقة الهوية حقًا.

وماذا عن هذا:

NAME               IMAGE              STATUS      PORTS             COMMAND
prickly_perlman    ubuntu:14.04       Up 15s      8000->8000/tcp    sleep 30000

تفسير:

  • بلا معرف لأن الحاويات لها أسماء دائمًا
  • لم يتم إنشاؤه ، يمكنك فحص ذلك
  • يبدو من المفيد جدًا معرفة نظرة عامة على جميع المنافذ المفتوحة ، ولكن ربما يمكن إسقاطها؟
  • يمكن اقتطاع الأمر لعرض المحطة ، مثل /bin/ps

bfirsh : thumbsup: مع هذه الملاحظات ؛

  • من فضلك ، لا تسقط المنافذ ، فهي مفيدة جدًا بالنسبة لي لمعرفة المنافذ المتصلة بأي حاوية بسرعة. إن الاضطرار إلى فحص كل حاوية أمر مرهق
  • ماذا تفعل بـ --no-trunc ، الآن لم يعد معرّف الحاوية مرئيًا؟ توجد العديد من الأمثلة التي تعتمد على هذه الميزة لتطهير الحاويات المتوقفة
  • ماذا سيكون ترتيب الفرز (الافتراضي)؟ تاريخ الإنشاء (غير منطقي ، لأن هذا العمود لم يعد مرئيًا)؟ أبجديا على اسم الحاوية؟
  • من أجل التحسين في المستقبل ؛ السماح بتحديد الأعمدة التي سيتم عرضها وفرزها (على سبيل المثال ، --columns=a,f,g --sort=a,e
  • من أجل التحسين في المستقبل ؛ جعل الأعمدة تظهر وفرزها على أساس شكلي في ملف التكوين
  • من أجل التحسين في المستقبل ؛ السماح بتعيين خيارات التصفية الافتراضية (عدم إظهار / عدم إظهار الحاويات المتوقفة افتراضيًا ( -a ))

ما الخطأ في توصيل الأنابيب إلى جهاز النداء؟

docker ps | less -S

@ benjamin-thomas أو docker ps اكتشاف TTY والتوصيل إلى less -S افتراضيًا؟

خدعة لطيفة @ benjamin-thomas ، سأستخدمها بالتأكيد في المستقبل. أحد الاعتبارات هو تجاهل المعلومات التي أهتم بها ، والأهم من ذلك ، أسماء الحاويات. بينما في حالة الاستخدام الخاصة بي ، لا أهتم كثيرًا على سبيل المثال ، CREATED و STATUS .

IMO قد تختلف حالة الاستخدام بين المستخدمين ، بالنسبة لي ، STATUS _من المهم الحصول على فحص سريع ما إذا كانت حاوياتي لا تزال تعمل بشكل جيد أو تقوم بعمل "whoopsie".

لست متأكدًا حقًا مما إذا كان يجب أن يصبح هذا إعادة تنفيذ كبيرة لإخراج ps ، أو _بدء_ بجعله أكثر نظافة بشكل افتراضي والبناء على ذلك ، مما يجعله أكثر قابلية للتكوين عن طريق إضافة خيارات لتحديد الأعمدة المراد عرضها ، ترتيب الفرز والتصفية.

nathanleclaire ، ما عليك سوى استخدام مفاتيح الأسهم بمجرد دخولك إلى less ، يمكنك الوصول إلى المحتوى بالكامل. أم أنني أسأت فهمك؟

grahamc لما لا ، أنا شخصياً أفضل الأدوات لعدم القيام بهذه الأشياء تلقائيًا. يمكن للمرء دائمًا تحديد الاسم المستعار shell لهذا IMO إذا لزم الأمر.

thaJeztah ، تحديد أسماء الأعمدة بالمفاتيح أمر منطقي بالنسبة لي ، مثل أمر ps النظام /bin/ps -o pid,ruser=RealUser -o comm=Command .

@ benjamin-thomas أوه ، لم أدرك ذلك حتى. لطيف! أنا أحب هذا الحل كثيرا.

@ benjamin-thomas /bin/ps يقوم بهذا تلقائيًا. إذا كنت تريد تعطيله ، فيمكنك تمريره عبر cat أو أيًا كان.

فيما يتعلق بعرض الناتج docker ps : هل من الضروري حقًا التعامل مع كل سلسلة روابط محتملة لحاوية معينة كاسم جديد لتلك الحاوية؟ على سبيل المثال ، إذا كان لدي خمس حاويات مسماة A و B و C و D و E و A روابط B و B إلى C وما إلى ذلك ، فسيكون لـ E خمسة أسماء مختلفة: E و D / E و C / D / E و B / C / D / E و A / B / C / D / E.

ثم إذا كان B يرتبط أيضًا ، على سبيل المثال ، D ، E يحصل على المزيد من الأسماء: B / D / E و A / B / D / E. يبدأ تشغيل واحد من النظام الذي أعمل عليه سبعة عشر حاوية - والتي ، جميعًا ، بسبب 31 علاقة تبعية ، لديها ثلاثمائة وسبعة وثمانين اسمًا. بغض النظر عن مدى اتساع النوافذ الطرفية الخاصة بي ، فإن إخراج docker ps لا يمكن قراءته بدون جهاز استدعاء. هل يعقل أن يكون عدد الأسماء - أسوأ من التربيعي - في عدد الحاويات؟ سيكون من الجيد على الأقل أن تكون هناك طريقة لتعطيل هذا المستوى المتحذلق من التعداد.

mraccident : +1: docker ps يجب أن يُظهر الاسم الأساسي فقط ، وليس كل الأسماء لتلك الحاوية

Salut ، لقد كان يزعجني أيضًا وأضفت للتو خيارًا "قصيرًا" لرسو السفن. الاحتفاظ بعمود المنفذ الكامل.
https://github.com/ChristianKniep/docker/tree/7477-short_ps

$ docker run --name fd1 -d -p 80 -p 22 -p 53 fedora sleep 600
af6599f9b1178b237f6c2524f14cada45a46b234168e5270b99b16d1ce0be295
$ docker run --name fd2 --link fd1:fd1  -d -p 80 -p 22 -p 53 fedora sleep 600
ec2b2afc72dae7e62b197dc5adbcdeb548435ac495b8c935c728eb7aff658004
$ docker run --name fd3 --link fd2:fd2  --link fd1:fd1  -d -p 80 -p 22 -p 53 fedora sleep 600
ac57921063cc6afbe1cf715872dc33df45147ef1f464859c0912261b88e6bb4b
$ docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                                                                 NAMES
ac57921063cc        fedora:latest   sleep 600           3 seconds ago       Up 2 seconds        0.0.0.0:49159->22/tcp, 0.0.0.0:49160->53/tcp, 0.0.0.0:49161->80/tcp   fd3                               
ec2b2afc72da        fedora:latest   sleep 600           11 seconds ago      Up 10 seconds       0.0.0.0:49156->22/tcp, 0.0.0.0:49157->53/tcp, 0.0.0.0:49158->80/tcp   fd2,fd3/fd2                       
af6599f9b117        fedora:latest   sleep 600           31 seconds ago      Up 30 seconds       0.0.0.0:49153->22/tcp, 0.0.0.0:49154->53/tcp, 0.0.0.0:49155->80/tcp   fd1,fd2/fd1,fd3/fd1,fd3/fd2/fd1                    
$ ./docker-1.1.2-dev ps -S
CONTAINER ID        IMAGE                       PORTS                                                                 NAMES
ac57921063cc        fedora:latest   0.0.0.0:49159->22/tcp, 0.0.0.0:49160->53/tcp, 0.0.0.0:49161->80/tcp   fd3                               
ec2b2afc72da        fedora:latest   0.0.0.0:49156->22/tcp, 0.0.0.0:49157->53/tcp, 0.0.0.0:49158->80/tcp   fd2,fd3/fd2                       
af6599f9b117        fedora:latest   0.0.0.0:49153->22/tcp, 0.0.0.0:49154->53/tcp, 0.0.0.0:49155->80/tcp   fd1,fd2/fd1,fd3/fd1,fd3/fd2/fd1             
$ ./docker-1.1.2-dev ps -h

Usage: docker ps [OPTIONS]

List containers

  -a, --all=false       Show all containers. Only running containers are shown by default.
  --before=""           Show only container created before Id or Name, include non-running ones.
  -f, --filter=[]       Provide filter values. Valid filters:
                          exited=<int> - containers with exit code of <int>
  -l, --latest=false    Show only the latest created container, include non-running ones.
  -n=-1                 Show n last created containers, include non-running ones.
  --no-trunc=false      Don't truncate output
  -q, --quiet=false     Only display numeric IDs
  -S, --short=false     Skip command created and status
  -s, --size=false      Display sizes
  --since=""            Show only containers created since Id or Name, include non-running ones.
$

نظرًا لأنني مبتدئ ، أعتقد أنه يمكن تحسين الكود الخاص بي ...
لكن من المذهل مدى سهولة تغيير الكود ، كرجل ثعبان طوال العام. احب ذلك!

تحرير: ربما يمكن للمرء إحضار حجم الجهاز وطرد الأعمدة لتقصير الخطوط ...

EDIT2: لقد اختصرت الأسماء وأضفت عددًا (أطفال) ، على الرغم من أنها مضللة بعض الشيء ، لأنها تحسب fd3-> fd2-> fd1 أيضًا.

$ ~/bin/docker-1.1.2-dev ps -S
CONTAINER ID        IMAGE                       PORTS                                                                 NAME                #CHILDREN
9b382826657c        fedora:latest   0.0.0.0:49168->22/tcp, 0.0.0.0:49169->53/tcp, 0.0.0.0:49170->80/tcp   fd3                 0
93f5a7b13d8b        fedora:latest   0.0.0.0:49165->22/tcp, 0.0.0.0:49166->53/tcp, 0.0.0.0:49167->80/tcp   fd2                 1
4c6f3564612c        fedora:latest   0.0.0.0:49162->80/tcp, 0.0.0.0:49163->22/tcp, 0.0.0.0:49164->53/tcp   fd1                 3

EDIT3: الآن أقوم باستخراج الاسم الصحيح

$ ./docker-1.1.2-dev ps -S
CONTAINER ID        IMAGE                       PORTS                                                                 NAME                #LINKS
71d9d03bba50        fedora:latest   0.0.0.0:49177->22/tcp, 0.0.0.0:49178->53/tcp, 0.0.0.0:49179->80/tcp   fd3                 0
cf67008f418f        fedora:latest   0.0.0.0:49174->22/tcp, 0.0.0.0:49175->53/tcp, 0.0.0.0:49176->80/tcp   fd2                 1
5549c65007b5        fedora:latest   0.0.0.0:49171->22/tcp, 0.0.0.0:49172->53/tcp, 0.0.0.0:49173->80/tcp   fd1                 3

أشعر أن تعريف المنافذ وإسهاب الأوقات يمثلان جزءًا كبيرًا من عرض الناتج docker ps . أعتقد أن اختصار الأوقات وجعل التفاف تعريفات المنافذ على الأسطر سيوفر مساحة كبيرة (بالإضافة إلى السماح لي بتحديد / إخفاء الأعمدة).

CONTAINER ID     IMAGE                 COMMAND                CREATED     STATUS              PORTS                            NAMES
8a2e6a22ae1f     me/abc-data:latest    "/bin/sh -c bash"      6 sec       Exited (0) 6 sec                                     app-without-ports
749ed051fb73     me/webserver:latest   "/opt/server/run.sh"   4 days      Up 4 days           0.0.0.0:8080->8080/tcp,          my-webserver
                                                                                              192.168.1.1:9990->9990/tcp      
2eb3c43af24f     me/app:latest         "/opt/container-star   8 days      Up 8 days           0.0.0.0:1234->1234/tcp,          some-other-app
                                                                                              0.0.0.0:4567->4567/tcp, 
                                                                                              0.0.0.0:50000->50000/tcp, 
                                                                                              0.0.0.0:50000->50000/udp  

ماذا عن السماح بتقديم قالب على سبيل المثال عن طريق تعيين متغير بيئة DOCKER_PS_FORMAT مع اسم العمود: width : modifier ، columname: width : modifier ، ...
حيث قد يسمح modifier بإعدادات إضافية مثل no-trunc أو full (على سبيل المثال لمعرّف الحاوية) أو short لـ CREATED حيث ~1h يمكن أن يكون About an hour ago .

لقد كتبت دالة bash / zsh هذه في ~/.bashrc لعرض إخراج docker ps ، يمكنك إخفاء الأعمدة أو إعادة ترتيبها:

dps()  {
  docker ps $@ | awk '
  NR==1{
    FIRSTLINEWIDTH=length($0)
    IDPOS=index($0,"CONTAINER ID");
    IMAGEPOS=index($0,"IMAGE");
    COMMANDPOS=index($0,"COMMAND");
    CREATEDPOS=index($0,"CREATED");
    STATUSPOS=index($0,"STATUS");
    PORTSPOS=index($0,"PORTS");
    NAMESPOS=index($0,"NAMES");
    UPDATECOL();
  }
  function UPDATECOL () {
    ID=substr($0,IDPOS,IMAGEPOS-IDPOS-1);
    IMAGE=substr($0,IMAGEPOS,COMMANDPOS-IMAGEPOS-1);
    COMMAND=substr($0,COMMANDPOS,CREATEDPOS-COMMANDPOS-1);
    CREATED=substr($0,CREATEDPOS,STATUSPOS-CREATEDPOS-1);
    STATUS=substr($0,STATUSPOS,PORTSPOS-STATUSPOS-1);
    PORTS=substr($0,PORTSPOS,NAMESPOS-PORTSPOS-1);
    NAMES=substr($0, NAMESPOS);
  }
  function PRINT () {
    print ID NAMES IMAGE STATUS CREATED COMMAND PORTS;
  }
  NR==2{
    NAMES=sprintf("%s%*s",NAMES,length($0)-FIRSTLINEWIDTH,"");
    PRINT();
  }
  NR>1{
    UPDATECOL();
    PRINT();
  }' | less -FSX;
}
dpsa() { dps -a $@; }

الحل البديل. قم بتعديل أي $ cols [x] تريد الاحتفاظ به حسب الرغبة.

docker ps | perl -ne '<strong i="6">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'

ألن يكون من الأسهل الحصول على شيء مثل:

$ docker ps --columns=name,id,status,image

ويمكن للجميع الاسم المستعار docker ps .

شكرا ،caiguanhao. حل مؤقت ذكي. تمت إضافته كمكوِّن إضافي Tackle لقشرة الأسماك.

يا رفاق ، أجروا للتو تحسينًا كودcaiguanhao لتتمكن من اختيار الأعمدة التي تريد عرضها. عندما يكون لديك حاوية تعرض العديد من المنافذ (مثل خدمة القنصل ، التي تعرض 5 أو 6 منافذ ويمكن أن تؤدي حتى إلى تجاوز شاشة بعرض 300 حرف) ، فمن الجيد أن يكون لديك أمر لإظهار كل عمود باستثناء تلك المنافذ ، و ثم آخر يعرض فقط اسم الحاويات ومنافذها (أضفت هذه الخيارات كأوامر جديدة افتراضيًا):

https://github.com/jpmelos/dotfiles/commit/457a9c68f87eb5bd455aa22bdadab81c2651c2ea

أحد التغييرات البسيطة التي من شأنها أن تساعد قليلاً هو تقليل التباعد بين أعمدة CONTAINER ID و IMAGE. الأعمدة الأخرى مفصولة بثلاث مسافات ، لكن هذه الأعمدة مفصولة بـ 8.

5 سنتات لي حتى يصبحوا "docker ps" قابلاً للقراءة:

https://github.com/t0mk/dosk#dops

هل سنرى أي تحديث على ذلك؟
docker ps هو الأمر الأكثر شيوعًا على ما أعتقد. آمل ألا يكون من الصعب إعطائنا خيار تصفية الأعمدة لعرضها.
(أتوقع شيئا مثل ذلك )

الدبس

مثل AntouanK قال و wpp اقترح بالفعل ، يفضل استخدام علم الأعمدة في معظم المواقف

أعتقد أن # 10255 يجب أن يعالج هذا.

duglin هل هذا يجعل الافتراضي أقصر ، مع ذلك؟ أود أن أبقي هذا مفتوحًا إذا لم يكن كذلك.

bfirsh نقطة جيدة ، لا لن يغير

كذلك هنا. ربما يتم عرض آلية ذكية تحدد الأعمدة الافتراضية من خلال تطبيق الحدود على ENV ["الأعمدة"]؟

أوافق على https://github.com/docker/docker/issues/7477#issuecomment -70243594 ، ما عليك سوى منحنا خيار اختيار الأعمدة.

أنا أيضًا أصوت لخيار https://github.com/docker/docker/issues/7477#issuecomment -70243594.
docker ps سيكون docker ps --columns=id,image,command,created,status,ports,name ويمكن بسهولة تنفيذ المزيد من الأعمدة مثل ip كما أراد بعض المستخدمين https://github.com/docker/docker/issues/8786

+1 لأعمدة

كحل بديل ، قمت بدمج docker ps -q مع docker inspect --format :

docker ps -q | xargs docker inspect --format '{{printf "%.12s\t%s" .Id .Config.Cmd}}'

عليك أن تبحث في ناتج فحص عامل التحميل وقوالب golang ، لكنها قابلة للتكوين بشكل لا نهائي تقريبًا.

تضمين التغريدة ربما يمكننا تقديم فكرة عامة للحفاظ على مجموعة من الحلول مثل هذه؟ حتى نحصل على بعض العلامات لتخصيص الإخراج بشكل صحيح ...

لقد قمنا بدمج # 14699 الذي يسمح لك بتشغيل docker ps --format ... لتغيير ناتج ps. يمكنك أيضًا تعيين تنسيق افتراضي إذا كنت تريد ذلك ، تحقق من لقطة الشاشة هذه:

image

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

بالنسبة لأولئك الذين يرغبون في تجربته ، يمكن العثور على الإنشاءات "الرئيسية" على

بينما يعد --format إضافة رائعة حقًا ، لا أعتقد أن هذا يحل المشكلة الأساسية. تقريبًا جميع أدوات سطر الأوامر التي أستخدمها يوميًا تتعامل مع المحطات ذات الأحجام المتغيرة بشكل صحيح. معظمها من خلال النظر إلى متغير البيئة $COLUMNS وعرض النص المناسب.

على سبيل المثال ، ps aux في محطة 80x24:
screenshot from 2015-07-23 00 47 35

وفي محطة 137x24:
screenshot from 2015-07-23 00 49 35

يغير عرض العمود ويقصر الأمر بحيث يتناسب كل شيء بشكل جيد في سطر واحد. كل شيء لسهولة القراءة والتحليل للإنسان.

بالتأكيد ، يمكنني كتابة غلاف bash الذي سيطبق خيارات تنسيق مختلفة اعتمادًا على $COLUMNS ولكنه يبدأ في الظهور حقًا متطفلًا وشيء أعتقد أنه يجب أن يكون السلوك الافتراضي لأي برنامج سطر أوامر. يؤسفني أن أقول إن إخراج عامل الإرساء فوضوي ويصعب قراءته.

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

nsg : متفق عليه - الناتج الافتراضي لا يزال بإمكانه القيام بالتحسين.

هل كان هناك أي تحديث بشأن هذه المسألة؟

لذلك لأي سبب من الأسباب ، لم تعد تجزئة الصور مقطوعة في إخراج ps. اضطررت بالفعل إلى جعل الجهاز الطرفي عريضًا للغاية (شغل الشاشة بأكملها) فقط لجعل عامل الإرساء قابلاً للاستخدام في الماضي ، والآن لم يعد هذا كافيًا. اعتبارًا من 1.7.1 ، يبلغ عرض كل سطر حوالي 200 عمود. من يستخدم محطة بهذا العرض؟

لقد كنت ألعب قليلا مع هذا.

إزالة المعرّف وإنشائه يجعلنا قليلاً من الطريق إلى هناك:

NAMES                 IMAGE          STATUS                     PORTS                         COMMAND
elegant_turing        nginx          Up 13 secs                 0.0.0.0:80->80/tcp, 443/tcp   "nginx -g 'daemon off"
composedemo_web_1     composedemo_   Exited (2) 23 secs ago                                   "/bin/sh -c 'python a"
composedemo_redis_1   redis          Exited (137) 11 secs ago                                 "/entrypoint.sh redis"
elated_carson         hello-world    Exited (0) 23 mins ago                                   "/hello"

لا يزال طويلا على الرغم من. يمكننا تجاهل 0.0.0.0 :

NAMES                 IMAGE          STATUS                     PORTS                 COMMAND
elegant_turing        nginx          Up 13 secs                 80->80/tcp, 443/tcp   "nginx -g 'daemon off"
composedemo_web_1     composedemo_   Exited (2) 23 secs ago                           "/bin/sh -c 'python a"
composedemo_redis_1   redis          Exited (137) 11 secs ago                         "/entrypoint.sh redis"
elated_carson         hello-world    Exited (0) 23 mins ago                           "/hello"

لكن لا يزال طويلا بعض الشيء. ربما تكون هناك حاجة إلى بعض الإبداع لتقصير الحالة ... شيء قابل للتحليل / الفحص ، لكنه لا يزال قصيرًا ... ربما Exit (2) 23s ago ؟

على الرغم من أنه يمكن تقصير الأمر ، إلا أننا نحتاج أيضًا إلى اختصار أي شيء آخر للتأكد من ظهور _ بعض_ الأمر على الأقل. لا يمكن تقصير الاسم. قد تحصل الصورة على علامة "..." عند اقتطاعها. نفس الشيء بالنسبة للموانئ الطويلة.

أفكار؟

بعض الاختراقات هنا: https://github.com/docker/docker/compare/master...bfirsh : 7477-shorter-ps

bfirsh أعتقد أنك على

إذا قمت بتغيير الحالة (كما قلت) إلى 23 ثانية بدلاً من 23 ثانية وقمت باقتطاع كل من عمود الصورة والمنافذ ، فيجب أن تكون قصيرة بدرجة كافية.

bfirsh هل بدأت العمل في العرض الافتراضي؟ هل تفكر في خيار --format يتحدث عنه بعض الناس؟

أيضًا ، يمكننا استخدام s بدلاً من sec و m بدلاً من mins

aanm لدينا بالفعل --format في عامل الإرساء 1.8. يمكنك أيضًا تغيير سلوك ps الافتراضي في ملف تكوين العميل بإضافة شيء مثل هذا:

{
  "psFormat": "table {{ .ID }}\\t{{ .Status }}"
}

يمكنك تعيين الإعداد الافتراضي الخاص بك بالتنسيق الذي تفضله بشكل أفضل.

غالبًا ما أحتاج إلى رؤية اسم الحاوية الحالي للتشغيل التالي docker exec للإرفاق.

لذلك ، آمل أنه إذا كان بإمكانك نقل NAMES بعد IMAGE ، فسيكون ذلك جيدًا ، ولست بحاجة إلى بعض التكوين بعد الآن.

شكرا.

مشكلة في عامل الإرساء 1.8.1 (fc21)
- لا يعرف التنسيق أسماء الحاويات.

docker ps --format "{{.ID}} t {{. Image}} t {{. CreatedAt}} t {{. RunningFor}} t {{. الحالة}} {{. Name}}" -a
خطأ في تحليل القالب: template:: 1: 64: تنفيذ "" في <.Name>: الاسم ليس حقلاً من نوع البنية * ps.containerContext

حتى الآن باستخدام:
عامل ميناء ps -a | بيرل-قضم بصوت عالي ؛ cols = انقسام / ثانية {2،} /، $ _؛ $ name = popcols ؛ printf "٪ -28s٪ -20s٪ -20s٪ -30sn" ، $ name ، $ cols [1] ، $ cols [3] ، $ cols [4] '

بفضل caiguanhao للإلهام.

أنا فقط أغادر هذا هنا:

IMAGE                                NAMES                     STATUS              PORTS
xxxxx:x.x                            xx_xxxxxxxx_xxxxx         Up About an hour    10.23.123.111:26002->6379/tcp
xxxxxxxxx:x.x                        xx_xxxxxxxx_xxxxxxxxx     Up About an hour    29015/tcp
                                                                                   10.23.123.111:26001->8080/tcp
                                                                                   10.23.123.111:26000->28015/tcp
xxxxxxxx_xx_xxxxxxxx                 xx_xxxxxxxx               Up About an hour    127.0.0.1:8086->8080/tcp
xxxxxx_xx                            xx_xxx_xxx                Up About an hour    127.0.0.1:8082->8888/tcp
xxx_xx                               xx_xxx                    Up About an hour    127.0.0.1:8083->8080/tcp
xxxx/xxxxxxxxx-xxxxxx                xx_xxx_xxxxxxxxx_xxx      Up 2 hours          10.23.123.111:25002->25565/tcp
xxxx/xxxxxxxxx-xxxxxx                xx_xxx_xxxxxxxxx_xxxxxx   Up 2 hours          10.23.123.111:25001->25565/tcp
xxxxxx/xxxxxxxx:xxxxxx               xxx_xxxxxxxx              Up 3 hours          127.0.0.1:8080->8080/tcp
xxxxxxxxxx/xxxxxxx                   xxx_xxxxxxx               Up 3 hours          10.23.123.111:25->25/tcp
                                                                                   10.23.123.111:587->587/tcp
xx_xxx                               xx_xx                     Up 3 hours          10.23.123.112:9987->9987/tcp
                                                                                   10.23.123.112:10011->10011/tcp
                                                                                   10.23.123.112:30033->30033/tcp
                                                                                   10.23.123.112:9987->9987/udp
xxxx.xx/xxxxxxxxx/xxxxxx:x.x.x       xxx_xxxxxx                Up 3 hours          10.42.241.123:22->22/tcp
                                                                                   443/tcp
                                                                                   127.0.0.1:8000->80/tcp
xxxxxx/xxxxxx-xxxxxx:xxxxxx          xxx_xxxxxx_xx_xxxxxx      Up 3 hours
xxxx.xx/xxxxxxxxx/xxxxxxxxxx:x.x-x   xxx_xxxxxx_xxxxxxxx       Up 3 hours          5432/tcp
xxxx.xx/xxxxxxxxx/xxxxx:xxxxxx       xxx_xxxxxx_xxxxx          Up 3 hours          6379/tcp

/etc/profile.d/dps.sh: https://gist.github.com/GottZ/4a6c2af314d73cd8b71d

لطيف GottZ ، شكرا للمشاركة!

thaJeztah أنا فقط جعلت كل سطر غامق لرؤية أفضل. استمتع: ابتسم:

في غضون ذلك ، أسلوبي مع awk :

$ alias my_docker_ps="docker ps | awk 'BEGIN{FIELDWIDTHS = \"20 33 23 20 20 70 20\"}{print \$1,\$2,\$5,\$7}'"

$ my_docker_ps         
CONTAINER ID         IMAGE                             STATUS               NAMES
b83fe9a6a06e         kibana                            Up 32 minutes        kibana              
4d78b9cd2bed         elasticsearch                     Up About an hour     evil_feynman        
fbbc40a49569         mattermost/platform               Up 9 weeks           mattermost-dev      
3b4dd9d00305         outcoldman/splunk:latest          Up 9 weeks           boring_yalow           

danidelvalle لماذا ليس ببساطة ؛

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}"

تم بالفعل ارتكاب هذا وإصداره. لا افهم لماذا هذا لا يزال مفتوحا؟

thaJeztah أنت على حق ، شكرا :)

@ ovidiub13 بشكل رئيسي بسبب https://github.com/docker/docker/issues/7477#issuecomment -123898874

نعم هذا مزعج ..

عادةً ما أكون على ما يرام بمجرد اقتطاع ps الافتراضي عند عرض العمود الطرفي:

dps() {
  docker ps | cut -c-$(tput cols)
}

+1 لـ --columns=name,id,status,image

هذه المشكلة لا تزال قائمة للأسف. على أي حال ، الحل هو وضع ما يلي (تم اختباره في Ubuntu) في .bashrc :

CMD_WATCHDOCKER="watch \"docker ps -q | xargs docker inspect --format '{{.Id}} @{{.Config.Image}} @{{.Config.Cmd}} @{{range \\\$p, \\\$conf := .NetworkSettings.Ports}}{{\\\$p}}->{{(index \\\$conf 0).HostPort}}{{end}} @{{.NetworkSettings.IPAddress}}' | column -t -s='@' | cut -c 1-5,64-\""
alias watchdocker='eval $CMD_WATCHDOCKER'

تشغيل watchdocker يعطي:

4596c3   ruby:2.2.2   [bash]                        172.17.0.82
827ca9   postgres     [postgres]   5432/tcp->5432   172.17.0.72

Pithikos docker ps--format '{{ .ID }}\t{{ .Image }}\t{{ .Command }}\t{{ .Ports }}' سيمنحك هذا بدون إجراء كل استدعاءات API لكل حاوية.
يمكنك أيضًا وضع هذا في ~/.docker/config.json لجعله التنسيق الافتراضي

@ cpuguy83 أي إصدار يدعم هذا؟ لم أتمكن أبدًا من الحصول على هذا العمل ، لا في العمل أو المنزل. سيكون رائعًا إذا تم ذكر الإصدار الذي يدعم ماذا في المستندات .

Pithikos إما 1.8 أو 1.9 ، لست متأكدًا.

الدبس

الاستخدام الصحيح مع الكلمة الرئيسية "جدول" في سلسلة التنسيق ، وهذا سيمنحك تنسيقًا متباعدًا رائعًا docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}"

أقوم بإغلاق هذه العلامة حيث يبدو أن علامة --format لـ ps تعالج المشكلة. شكرا لكم جميعا!

ربما لم يتم تسمية هذه القضية بشكل جيد. يبقى أن _ الافتراضي _ للأوامر يجب أن يكون بعرض 80 حرفًا. يسعدني إغلاق هذا لأنه ليس بهذه الأهمية.

ماذا عن إضافة خيار لجعل عرض النتيجة عموديًا ، مثل select * from foobar\G في MySQL

عادةً ما أريد فقط معرفة الحاويات التي تعمل (وإلى متى).

هذه هي الحيلة بالنسبة لي:

$ docker ps --format "table {{.Names}}\t{{.Status}}"

والأفضل من ذلك ، لقد قمت بلفها في اسم مستعار يسهل تذكره حقًا:

alias dps='docker ps --format "table {{.Names}}\t{{.Status}}"'

فيما يلي عينة من المخرجات:

NAMES                     STATUS
projectxyz_chrome_1       Up 11 minutes
projectxyz_web_1          Up 11 minutes
projectxyz_app_1          Up 11 minutes
projectxyz_phpmyadmin_1   Up 11 minutes
projectxyz_memcached_1    Up 11 minutes
projectxyz_db_1           Up 11 minutes

يمكنك معرفة المزيد حول الأمر --format هنا:
https://docs.docker.com/engine/reference/commandline/ps/

آمل أن يساعد شخصًا ما 😃

joshmedeski ، يمكنك أيضًا تخزين التنسيق المفضل لديك في ملف التكوين ، بحيث يتم استخدامه كإعداد افتراضي ؛ https://docs.docker.com/engine/reference/commandline/cli/#/configuration - الملفات

بروح حفظ ضغطات المفاتيح هنا هو البرنامج النصي الصغير bash الذي كتبته لأخذ قائمة من الوسائط ، وإنشاء سلسلة قالب go وتنفيذ أمر docker ps لإعطاء عرض فوري لأي أعمدة مطلوبة بأي ترتيب. إن وضع التكوين في ملف ليس ديناميكيًا بدرجة كافية - أجد أن وجود مجموعة واحدة من الأعمدة في لحظة واحدة ومجموعة مختلفة بعد لحظة أمر مفيد للغاية. السيناريو هنا ، نأمل أن يكون مفيدًا لشخص ما. في صحتك -أندي

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import subprocess

show_all = False
fields = [
  "Names",
  "Command",
  "Image",
  "CreatedAt",
  "Status",
]

cmd = ['docker', 'ps']
if show_all:
  cmd += ['-a']
cmd += ['--format', '\t'.join([('{{ .'+field+' }}') for field in fields])]
response = subprocess.check_output(cmd)

dataset = [fields]
dataset_widths = [0] * len(fields)
for idx, line in enumerate(response.split('\n')[:-1]):
  fieldvalues = line.decode('utf-8').replace(u"\u2026", u"_").split('\t')
  dataset.append(fieldvalues)
  for jdx, fieldvalue in enumerate(fieldvalues):
    if dataset_widths[jdx] < len(fieldvalue):
      dataset_widths[jdx] = len(fieldvalue)

for idx, items in enumerate(dataset):
  output_line = ['{:>3d}'.format(idx)]
  for jdx, item in enumerate(items):
    output_line.append(('{:'+str(dataset_widths[jdx])+'s}').format(item))
  print '   '.join(output_line)

ضع هذا في الملف ~ / .docker / config.json
{ "psFormat": "table {{.Names}}\\t{{.Image}}\\t{{.RunningFor}} ago\\t{{.Status}}\\t{{.Command}}", "imagesFormat": "table {{.Repository}}\\t{{.Tag}}\\t{{.ID}}\\t{{.Size}}" }

وتعديلها حسب رغبتك. بالنسبة لي ، كانت المشكلة دائمًا هي اسم الصورة الطويل (نظرًا لاحتوائه على اسم المستودع الشخصي الخاص بي لصوري المخصصة)

يجب على كل من يبحث عن عامل ميناء أفضل أن يفحص هذا:
https://github.com/moncho/dry

الحل البديل. قم بتعديل أي $ cols [x] تريد الاحتفاظ به حسب الرغبة.

docker ps | perl -ne '<strong i="7">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'

شكرا.

كان هذا كل ما احتاجه:
docker ps | perl -ne '<strong i="12">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s", $cols[1], $cols[4], $cols[6]'

إعطاء أسماء حالة الصورة
في الأعمدة المحاذاة جيدًا

تعديل

من الأفضل إنشاء اسم مستعار bash بشيء مثل هذا:

docker ps --format="table {{.Image}}\t{{.Status}}\t{{.Ports}}\t{{.Names}}"

لاحظ تنسيق "الجدول"

الحل البديل. قم بتعديل أي $ cols [x] تريد الاحتفاظ به حسب الرغبة.

docker ps | perl -ne '<strong i="7">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'

هذا رائع ، شكرا

nagracks إذا كنت تريد هذا التنسيق كإعداد افتراضي ، فإنني أوصي باستخدام أسلوب --format (والذي يمكن تخزينه في ملف التكوين ~/.docker/config.json الخاص بك)

إذا قمت بتعديل ملف .docker/config.json بشيء مخصص مثل هذا:

"imagesFormat": "table {{.ID}}  {{.Repository}}\t{{.Tag}}  {{.CreatedSince}}  {{.Size}}",
"psFormat": "table {{.ID}}  {{.Names}}\t{{.Image}}  {{.Command}}  {{.Status}}",

كيف يمكنني بعد ذلك استخدام الأمر docker ps لعرض التنسيق الافتراضي؟ حاولت docker ps --format "" ، لكنها ما زالت تستخدم ملف config.

يجب أن يعطي استخدام docker ps --format=table تنسيق الجدول الافتراضي

سأكون ممتنًا حقًا إذا كان هناك إصدار أقل مطولًا من الإخراج متاحًا افتراضيًا ، دون الحاجة إلى تذكر صيغة تنسيق الجدول أو ما هي أسماء المتغيرات في سياق التنسيق. حتى إذا تم الاحتفاظ بالقيمة الافتراضية كما هي ، فإن وضع علامة _pre-formatted_ أقل مطولاً سيكون مفيدًا.

بالنسبة إلى المعلومات التي يمكن اختزالها من إصدار أقل إسهابًا ، فإليك سنتي:

  • يخدم الاسم والمعرف لمعظم الاستخدامات نفس الغرض ، ويمكن استبعاد مثل هذا الغرض.
  • من المحتمل أن يكون تاريخ الإنشاء أمرًا لا بأس به إذا تم حذفه من الإخراج الأقل طولًا
  • سأكون أيضًا على ما يرام شخصيًا مع حذف المنافذ من الإخراج الأقل طولًا

في حالة الاستخدام الخاصة بي ، عادةً ما أرغب فقط في البحث عن اسم الحاوية التي سأقوم بتشغيل بعض الأوامر الأخرى ضدها (على سبيل المثال على عقدة خادم بعيد) ، كما أن التفاف الإخراج عبر أسطر متعددة يجعل من الصعب معرفة الاسم الدقيق للحاوية التي أهتم بها.

أشعر بخيبة أمل إلى حد ما من الحل "المعتمد" هنا "فقط تكوين اسم مستعار باستخدام - معلمة التنسيق" ، كما لو كنت ستعمل دائمًا على تشغيل هذه الأوامر في البيئات التي حددت فيها اسمك المستعار ، أو تذكر صيغة التنسيق ومتغيرات السياق

ما زلت أواجه هذه المشكلة يوميًا ، FWIW. إنتاجي الحالي البالغ docker ps -a يبلغ عرضه _180 حرفًا_ ​​- أكثر من نصف شاشة 4K مقاس 27 بوصة!

CONTAINER ID        IMAGE                                          COMMAND                 CREATED             STATUS                    PORTS               NAMES
994be99dddd1        nvidia/cuda:10.2-devel-ubuntu18.04             "bash"                  4 days ago          Exited (0) 4 days ago                         eager_tesla
30796cc3db32        nvidia/cuda:10.2-devel-ubuntu18.04             "bash"                  4 days ago          Exited (127) 4 days ago                       laughing_maxwell
ed5f20c1cff3        gcr.io/deeplearning-platform-release/tf2-gpu   "/entrypoint.sh bash"   4 days ago          Exited (0) 3 days ago                         distracted_ardinghelli
0bb06e992ef4        gcr.io/deeplearning-platform-release/tf2-gpu   "/entrypoint.sh bash"   4 days ago          Exited (0) 4 days ago                         bold_brahmagupta

لا ينبغي أن يُتوقع من المستخدم العادي أن يطلق على أمره docker ps اسمًا مستعارًا لمجرد جعله قابلاً للقراءة على محطة طرفية ذات حجم معقول. ربما لا يجب أن تكون صغيرة مثل 80 حرفًا ، لكن بالتأكيد لا يجب أن تكون 180 حرفًا.

أنا أميل إلى فتح طلب سحب باعتباري قانعًا. 😏

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات