من الصعب جدًا قراءة الإخراج من docker ps
على محطات عرض 80 حرفًا.
/bin/ps
بعمل جيد جدًا في تغليف المخرجات على محطات ضيقة (على سبيل المثال ، وضع المعلومات المهمة أولاً ، ثم الأمر في النهاية ثم اقتطاعها). أتساءل عما إذا كان بإمكاننا القيام بعمل أفضل.
الكثير من الحب والعديد من +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" قابلاً للقراءة:
هل سنرى أي تحديث على ذلك؟
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. يمكنك أيضًا تعيين تنسيق افتراضي إذا كنت تريد ذلك ، تحقق من لقطة الشاشة هذه:
سأغلق هذه المشكلة على أنها تم إصلاحها. من فضلك ، لا تتردد في تجربة ذلك وإخبارنا برأيك.
بالنسبة لأولئك الذين يرغبون في تجربته ، يمكن العثور على الإنشاءات "الرئيسية" على
بينما يعد --format
إضافة رائعة حقًا ، لا أعتقد أن هذا يحل المشكلة الأساسية. تقريبًا جميع أدوات سطر الأوامر التي أستخدمها يوميًا تتعامل مع المحطات ذات الأحجام المتغيرة بشكل صحيح. معظمها من خلال النظر إلى متغير البيئة $COLUMNS
وعرض النص المناسب.
على سبيل المثال ، ps aux
في محطة 80x24:
وفي محطة 137x24:
يغير عرض العمود ويقصر الأمر بحيث يتناسب كل شيء بشكل جيد في سطر واحد. كل شيء لسهولة القراءة والتحليل للإنسان.
بالتأكيد ، يمكنني كتابة غلاف 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] '
parf يسمى العنصر النائب بالفعل Names
:
بفضل 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 / images إلى 80 عمودًا
الاستخدام الصحيح مع الكلمة الرئيسية "جدول" في سلسلة التنسيق ، وهذا سيمنحك تنسيقًا متباعدًا رائعًا docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}"
أقوم بإغلاق هذه العلامة حيث يبدو أن علامة --format
لـ ps
تعالج المشكلة. شكرا لكم جميعا!
ربما لم يتم تسمية هذه القضية بشكل جيد. يبقى أن _ الافتراضي _ للأوامر يجب أن يكون بعرض 80 حرفًا. يسعدني إغلاق هذا لأنه ليس بهذه الأهمية.
--format
غير كافٍ.
https://docs.docker.com/engine/reference/commandline/ps/#/formatting
ماذا عن إضافة خيار لجعل عرض النتيجة عموديًا ، مثل 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 حرفًا.
أنا أميل إلى فتح طلب سحب باعتباري قانعًا. 😏
التعليق الأكثر فائدة
ما الخطأ في توصيل الأنابيب إلى جهاز النداء؟