Moby: Output "docker ps" default terlalu lebar

Dibuat pada 8 Agu 2014  ·  83Komentar  ·  Sumber: moby/moby

screenshot 2014-08-07 16 27 38

Output dari docker ps sangat sulit dibaca pada terminal lebar 80 karakter.

/bin/ps melakukan pekerjaan yang cukup baik untuk membungkus keluaran pada terminal sempit (misalnya menempatkan informasi penting terlebih dahulu, perintah terakhir dan memotongnya). Aku ingin tahu apakah kita bisa berbuat lebih baik.

arecli exbeginner kinenhancement kinfeature

Komentar yang paling membantu

Apa yang salah dengan pemipaan ke pager?

docker ps | less -S

Semua 83 komentar

Begitu banyak cinta dan banyak +1. Saya menggunakan terminal 80x24 (sangat disayangkan
rekan-rekan saya) dan yang satu ini sedikit mengganggu saya selama beberapa waktu
waktu.

Saya harus mengatakan ini sering membuat saya juga.

Ada ide untuk solusi? Memiliki versi yang lebih kecil pada terminal yang lebih sempit terdengar bagus.

Yah, ID tidak benar-benar perlu ada di sana.

Bagaimana dengan ini:

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

Penjelasan:

  • tidak ada ID karena wadah selalu memiliki nama
  • tidak dibuat, Anda dapat memeriksanya
  • tampaknya cukup berguna untuk mengetahui gambaran umum dari semua port yang terbuka, tapi mungkin ini bisa dihapus?
  • perintah dapat dipotong ke lebar terminal, seperti /bin/ps

@bfirsh :thumbsup: dengan catatan ini;

  • Tolong, jangan jatuhkan port, bagi saya itu cukup berguna untuk melihat dengan cepat port apa yang terhubung ke wadah apa. Harus memeriksa setiap wadah itu rumit
  • Apa yang harus dilakukan dengan --no-trunc , sekarang container-id tidak lagi terlihat? Ada banyak contoh yang mengandalkan fitur ini untuk membersihkan kontainer yang berhenti
  • Apa yang akan menjadi urutan pengurutan (default)? Tanggal dibuat (tidak logis, karena kolom itu tidak lagi terlihat)? Sesuai abjad pada nama wadah?
  • Untuk perbaikan di masa depan; izinkan menentukan kolom mana yang akan ditampilkan dan diurutkan (misalnya --columns=a,f,g --sort=a,e
  • Untuk perbaikan di masa depan; buat kolom untuk ditampilkan dan diurutkan dapat dikonfigurasi dalam file konfigurasi
  • Untuk perbaikan di masa depan; izinkan pengaturan opsi filter default (jangan/jangan tampilkan wadah yang dihentikan secara default ( -a ))

Apa yang salah dengan pemipaan ke pager?

docker ps | less -S

@benjamin-thomas atau docker ps mendeteksi TTY dan mengirim ke less -S secara default?

Trik yang bagus @benjamin-thomas , saya pasti akan menggunakannya di masa depan. Satu pertimbangan adalah bahwa tidak meninggalkan informasi yang saya pedulikan, yang paling penting, nama wadah. Sedangkan di usecase saya, saya biasanya tidak terlalu peduli tentang misalnya CREATED dan STATUS .

IMO kasus penggunaan dapat bervariasi di antara pengguna, bagi saya, STATUS _is_ penting untuk mendapatkan pemeriksaan cepat apakah wadah saya masih berjalan dengan baik atau membuat 'whoopsie'.

Saya tidak begitu yakin apakah ini harus menjadi implementasi ulang besar dari output ps, atau ke _start_ dengan membuatnya sedikit lebih bersih secara default dan membangunnya, membuatnya lebih dapat dikonfigurasi dengan menambahkan opsi untuk menentukan kolom yang akan ditampilkan, mengurutkan urutan dan penyaringan.

@nathanleclaire , cukup gunakan tombol panah setelah Anda berada di dalam less , Anda memiliki akses ke seluruh konten. Atau aku salah paham denganmu?

@grahamc mengapa tidak, secara pribadi saya lebih suka alat untuk tidak melakukan hal-hal itu secara otomatis. Seseorang selalu dapat menentukan alias shell untuk IMO ini jika diperlukan.

@thaJeztah menentukan nama kolom dengan sakelar masuk akal bagi saya, seperti perintah sistem ps /bin/ps -o pid,ruser=RealUser -o comm=Command .

@benjamin-thomas Oh, saya bahkan tidak menyadarinya. Bagus! Saya sangat menyukai solusi ini.

@benjamin-thomas /bin/ps melakukan ini secara otomatis. Jika Anda ingin menonaktifkannya, Anda dapat menyalurkannya melalui cat atau apa pun.

Terkait dengan lebar docker ps keluaran: apakah benar-benar perlu untuk memperlakukan setiap kemungkinan rantai tautan ke wadah yang diberikan sebagai nama baru untuk wadah itu? Misalnya, jika saya memiliki lima wadah bernama A, B, C, D, dan E, dan A tautan ke B, B tautan ke C, dan seterusnya, maka E akan memiliki lima nama berbeda: E, D/E, C/ D/E, B/C/D/E, dan A/B/C/D/E.

Kemudian jika B juga menautkan ke, katakanlah, D, E mendapat LEBIH BANYAK nama: B/D/E dan A/B/D/E. Satu kali sistem yang sedang saya kerjakan memulai tujuh belas kontainer -- yang, semuanya, karena 31 hubungan ketergantungan, memiliki _tiga ratus delapan puluh tujuh nama_. Tidak peduli seberapa lebar saya membuat jendela terminal saya, output dari docker ps tidak dapat dibaca tanpa pager. Apakah masuk akal jika jumlah nama _lebih buruk daripada kuadrat_ dalam jumlah wadah? Setidaknya akan lebih baik jika ada cara untuk menonaktifkan tingkat enumerasi yang bertele-tele ini.

@mraccident :+1: docker ps seharusnya hanya menampilkan nama utama, tidak semua nama untuk wadah itu

Salut, itu juga mengganggu saya dan saya baru saja menambahkan opsi '--short' ke buruh pelabuhan. menjaga port-kolom lengkap.
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.
$

Karena saya seorang pemula, saya kira kode saya dapat... dioptimalkan...
Tapi menakjubkan betapa mudahnya mengubah kode, sebagai pria python selama setahun. Saya suka itu!

EDIT: Mungkin seseorang dapat mengambil ukuran terminal dan mengeluarkan kolom untuk mempersingkat garis ...

EDIT2: Saya mempersingkat NAMA-NAMA dan menambahkan hitungan (ANAK-ANAK), meskipun sedikit menyesatkan, karena menghitung fd3->fd2->fd1 juga.

$ ~/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: Sekarang saya mengekstrak nama yang benar

$ ./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

Saya merasa bahwa definisi port dan verbositas waktu adalah bagian besar dari lebar output docker ps . Saya pikir menyingkat waktu dan membuat definisi port membungkus garis akan menghemat banyak ruang (selain memungkinkan saya untuk memilih/menyembunyikan kolom).

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  

Bagaimana dengan mengizinkan untuk menyediakan templat misalnya dengan menyetel variabel lingkungan DOCKER_PS_FORMAT dengan nama kolom: lebar : pengubah, nama kolom: lebar : pengubah, ...
di mana modifier memungkinkan pengaturan tambahan seperti no-trunc , full (misalnya untuk id wadah) atau short untuk CREATED mana ~1h bisa menjadi bentuk singkat untuk About an hour ago .

Saya menulis fungsi bash/zsh ini di ~/.bashrc untuk menampilkan output docker ps , Anda dapat menyembunyikan atau memesan ulang kolom:

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 $@; }

Peretasan solusi. Ubah $cols[x] mana yang ingin Anda pertahankan sesuai keinginan.

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

Bukankah lebih mudah untuk memiliki sesuatu seperti:

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

dan semua orang bisa saja alias docker ps .

Terima kasih, @caiguanhao. Solusi sementara yang cerdas. Menambahkannya sebagai plugin Tackle untuk cangkang ikan.

Kawan, baru saja membuat sedikit perbaikan pada kode @caiguanhao untuk dapat memilih kolom mana yang akan ditampilkan. Saat Anda memiliki wadah yang memperlihatkan banyak port (seperti layanan Konsul, yang mengekspos 5 atau 6 port dan bahkan dapat membuat layar meluap dengan lebar 300 karakter), ada baiknya memiliki perintah untuk menampilkan setiap kolom kecuali port tersebut, dan lalu satu lagi yang hanya menampilkan nama wadah dan portnya (saya menambahkan opsi ini sebagai perintah baru secara default):

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

Satu perubahan sederhana yang akan sedikit membantu adalah mengurangi jarak antara kolom ID PENAMPUNG dan GAMBAR. Kolom lainnya semuanya dipisahkan oleh 3 spasi, tetapi keduanya dipisahkan oleh 8.

5 sen saya sampai mereka membuat 'docker ps' dapat dibaca:

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

Apakah kita akan melihat pembaruan tentang itu?
docker ps adalah perintah yang paling umum. Saya harap tidak terlalu sulit untuk memberi kami opsi untuk memfilter kolom yang akan ditampilkan.
(Saya mengharapkan sesuatu seperti itu )

dib

Seperti yang dikatakan @AntouanK dan @wpp sudah disarankan, bendera kolom akan lebih disukai untuk sebagian besar situasi

Saya pikir #10255 harus mengatasi ini.

@duglin Apakah ini membuat default lebih pendek? Saya ingin tetap membuka ini jika tidak.

@bfirsh poin bagus, tidak, itu tidak akan mengubah default. Tapi saya tidak yakin kita bisa mengubah default sampai v2 (jika/kapan itu) karena kita akan merusak klien yang ada jika kita melakukannya.

sama disini. mungkin beberapa mekanisme cerdas yang memilih kolom default yang ditampilkan dengan menerapkan ambang batas ke ENV['KOLOM']?

Saya setuju dengan https://github.com/docker/docker/issues/7477#issuecomment -70243594, cukup beri kami opsi untuk memilih kolom.

Saya juga memilih opsi https://github.com/docker/docker/issues/7477#issuecomment -70243594 .
docker ps akan menjadi docker ps --columns=id,image,command,created,status,ports,name dan dapat dengan mudah mengimplementasikan lebih banyak kolom seperti ip seperti yang diinginkan beberapa pengguna https://github.com/docker/docker/issues/8786

+1 untuk --kolom

Sebagai solusinya, saya menggabungkan docker ps -q dengan docker inspect --format :

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

Anda harus menggali ke dalam output dari pemeriksaan buruh pelabuhan dan templating golang, tetapi ini hampir dapat dikonfigurasi tanpa batas.

@jafcrocker Bagus. Mungkin kita bisa membuat intisari publik untuk menyimpan koleksi solusi seperti ini? Sampai kami mendapatkan beberapa tanda untuk menyesuaikan output dengan benar...

kami baru saja menggabungkan #14699 yang memungkinkan Anda menjalankan docker ps --format ... untuk mengubah output ps. Anda juga dapat mengatur format default jika Anda mau, lihat tangkapan layar ini:

image

Saya akan menutup masalah ini sebagai sudah diperbaiki. Silakan, jangan ragu untuk mencobanya dan beri tahu kami pendapat Anda.

Bagi mereka yang ingin mencobanya, build "master" dapat ditemukan di https://master.dockerproject.org dan fitur ini akan segera tersedia (jika belum)

Sementara --format adalah tambahan yang sangat bagus, saya tidak berpikir ini memecahkan masalah utama. Hampir semua alat baris perintah yang saya gunakan setiap hari menangani terminal berukuran variabel dengan benar. Kebanyakan dengan melihat variabel lingkungan $COLUMNS dan menampilkan teks yang sesuai.

Misalnya, ps aux di terminal 80x24:
screenshot from 2015-07-23 00 47 35

Dan di terminal 137x24:
screenshot from 2015-07-23 00 49 35

Ini mengubah lebar kolom dan memperpendek perintah sehingga semuanya cocok dalam satu baris. Semuanya untuk keterbacaan dan mudah diuraikan untuk manusia.

Tentu, saya dapat menulis pembungkus bash yang akan menerapkan opsi pemformatan berbeda tergantung pada $COLUMNS tetapi mulai terdengar sangat retas dan sesuatu yang saya pikir harus menjadi perilaku default untuk program baris perintah apa pun. Maaf untuk mengatakan, output dari buruh pelabuhan berantakan dan sulit dibaca.

Apakah ada alasan mengapa ini tidak dilakukan? Adakah batasan di beberapa perpustakaan atau keputusan dari Anda? Perlu tahu apakah ini sesuatu yang layak dipertimbangkan untuk diperbaiki dalam PR, atau, mungkin saya menggonggong pohon yang salah.

@nsg : Setuju - output default masih bisa dilakukan dengan peningkatan.

Apakah ada pembaruan tentang masalah ini?

Jadi untuk alasan apa pun, hash gambar tidak lagi terpotong dalam output ps. Saya sudah harus membuat terminal saya sangat lebar (mengambil seluruh layar) hanya untuk membuat buruh pelabuhan dapat digunakan di masa lalu, sekarang itu tidak lagi cukup. Pada 1.7.1, setiap baris memiliki lebar sekitar 200 kolom. Siapa yang menggunakan terminal seluas itu?

Saya sudah bermain-main sedikit dengan ini.

Menghapus ID dan membuat kita mendapatkan sedikit jalan ke sana:

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"

Padahal masih terlalu lama. Kita bisa mengabaikan 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"

Tapi masih agak lama. Mungkin diperlukan kreativitas untuk mempersingkat status... sesuatu yang dapat diuraikan/dipindai, tetapi masih pendek... Exit (2) 23s ago mungkin?

Meskipun perintah dapat dipersingkat, kita juga perlu mempersingkat hal lain untuk memastikan setidaknya _beberapa_ perintah ditampilkan. Tidak dapat mempersingkat nama. Gambar mungkin bisa mendapatkan "..." ketika terpotong. Sama untuk port panjang.

Pikiran?

Beberapa peretasan ada di sini: https://github.com/docker/docker/compare/master...bfirsh :7477-shorter-ps

@bfirsh Saya pikir Anda sedang melakukan sesuatu.

Jika Anda mengubah Status (seperti yang Anda katakan) menjadi 23 detik alih-alih 23 detik dan memotong kolom gambar dan port, itu harus cukup singkat.

@bfirsh Anda mulai bekerja dalam tampilan default? Apakah menurut Anda opsi --format dibicarakan oleh beberapa orang?

Juga, kita bisa menggunakan s sebagai ganti sec dan m sebagai ganti mins

@aanm kita sudah memiliki --format di docker 1.8. Anda juga dapat mengubah perilaku ps default di file konfigurasi klien dengan menambahkan sesuatu seperti ini:

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

Anda dapat mengatur default Anda dengan format yang Anda suka lebih baik.

Saya sering perlu melihat nama wadah saat ini, untuk menjalankan docker exec untuk dilampirkan.

jadi, saya harap jika dapat memindahkan NAMES setelah IMAGE , itu akan baik, saya tidak perlu konfigurasi lagi.

Terima kasih.

Masalah di buruh pelabuhan 1.8.1 (fc21)
--format tidak tahu tentang nama wadah.

docker ps --format "{{.ID}}t{{.Image}}t{{.CreatedAt}}t{{.RunningFor}}t{{.Status}}t{{.Name}}" -a
Kesalahan penguraian template: template: :1:64: mengeksekusi "" di <.Name>: Nama bukan bidang tipe struct *ps.containerContext

Sejauh ini menggunakan:
buruh pelabuhan ps -a | perl -ne 'chomp; @cols = split /s{2,}/, $_; $nama=pop @cols; printf "%-28s %-20s %-20s %-30sn", $name, $cols[1], $cols[3], $cols[4]'

terima kasih kepada @caiguanhao atas inspirasinya.

saya hanya meninggalkan ini di sini:

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

Bagus @GottZ , terima kasih telah berbagi!

@thaJeztah saya baru saja membuat setiap garis tebal untuk visibilitas yang lebih baik. selamat bersenang-senang :senyum:

Sementara itu, pendekatan saya dengan 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 mengapa tidak sederhana;

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

Ini sudah dilakukan dan dirilis. Saya tidak mengerti, mengapa ini masih terbuka?

@thaJeztah Anda benar, terima kasih :)

@ovidiub13 terutama karena https://github.com/docker/docker/issues/7477#issuecomment -123898874

ya ini mengganggu..

Saya biasanya baik-baik saja dengan hanya memotong ps default pada lebar kolom terminal:

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

+1 untuk --columns=name,id,status,image

Masalah ini masih ada sayangnya. Bagaimanapun solusinya adalah dengan meletakkan yang di bawah ini (diuji di Ubuntu) di .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'

Menjalankan watchdocker memberikan:

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 }}' akan memberi Anda ini tanpa membuat semua panggilan API untuk setiap wadah.
Anda juga dapat memasukkan ini ke dalam ~/.docker/config.json untuk menjadikannya format default

@ cpuguy83 versi mana yang mendukung ini? Saya tidak pernah berhasil membuatnya bekerja, baik di tempat kerja maupun di rumah. Akan lebih keren jika dalam dokumen disebutkan versi mana yang mendukung apa.

@Pithikos Entah 1,8 atau 1,9, tidak yakin.

dib

penggunaan yang benar adalah dengan kata kunci "tabel" dalam format string, ini akan memberi Anda format spasi yang bagus docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}"

Saya menutup yang ini karena tampaknya flag --format untuk ps mengatasi masalah ini. Terima kasih semuanya!

Masalah ini mungkin tidak disebutkan dengan baik. Masih tetap bahwa _default_ untuk perintah harus memiliki lebar 80 karakter. Senang karena ini ditutup karena itu tidak terlalu penting.

bagaimana dengan menambahkan opsi untuk membuat tampilan hasil secara vertikal, seperti select * from foobar\G di MySQL

Saya biasanya hanya ingin tahu wadah mana yang berjalan (dan untuk berapa lama).

Ini melakukan trik untuk saya:

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

Lebih baik lagi, saya membungkusnya dengan alias yang sangat mudah diingat:

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

Berikut contoh outputnya:

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

Anda dapat mempelajari lebih lanjut tentang perintah --format sini:
https://docs.docker.com/engine/reference/commandline/ps/

Semoga itu membantu seseorang

@joshmedeski Anda juga dapat menyimpan pemformatan pilihan Anda dalam file konfigurasi, sehingga digunakan sebagai default; https://docs.docker.com/engine/reference/commandline/cli/#/configuration -files

Dalam semangat menghemat penekanan tombol di sini adalah skrip bash kecil yang saya tulis untuk mengambil daftar argumen, membangun string template go dan menjalankan perintah docker ps sehingga memberikan tampilan langsung dari kolom apa pun yang diinginkan dalam urutan apa pun. Menempatkan konfigurasi dalam file tidak cukup dinamis - Saya menemukan bahwa memiliki satu set kolom suatu saat dan set yang berbeda beberapa saat kemudian cukup berguna. Script ada di sini , semoga bermanfaat bagi seseorang. Salam -andy

#!/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)

letakkan ini di ~/.docker/config.json Anda
{ "psFormat": "table {{.Names}}\\t{{.Image}}\\t{{.RunningFor}} ago\\t{{.Status}}\\t{{.Command}}", "imagesFormat": "table {{.Repository}}\\t{{.Tag}}\\t{{.ID}}\\t{{.Size}}" }

Dan modifikasi sesuai keinginan Anda. Bagi saya masalahnya selalu nama gambar yang panjang (karena berisi nama repositori pribadi saya untuk gambar kustom saya)

semua orang yang mencari ps buruh pelabuhan yang lebih baik harus memeriksa ini:
https://github.com/moncho/dry

Peretasan solusi. Ubah $cols[x] mana yang ingin Anda pertahankan sesuai keinginan.

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

Terima kasih.

Ini semua yang saya butuhkan:
docker ps | perl -ne '<strong i="12">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s", $cols[1], $cols[4], $cols[6]'

memberikan NAMA STATUS GAMBAR
dalam kolom yang selaras dengan baik

EDIT

lebih baik membuat alias bash dengan sesuatu seperti ini:

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

Perhatikan format "tabel"

Peretasan solusi. Ubah $cols[x] mana yang ingin Anda pertahankan sesuai keinginan.

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

Itu luar biasa, thnx

@nagracks jika Anda menginginkan format itu sebagai default, saya sarankan menggunakan pendekatan --format (yang dapat disimpan dalam file konfigurasi ~/.docker/config.json )

Jika saya memodifikasi file .docker/config.json dengan sesuatu yang khusus seperti ini:

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

Bagaimana saya bisa menggunakan perintah docker ps untuk melihat format default? Saya mencoba docker ps --format "" , tetapi masih menggunakan konfigurasi.

Menggunakan docker ps --format=table akan memberikan format tabel default

Saya akan sangat menghargai jika ada versi keluaran yang kurang bertele-tele yang tersedia secara default, tanpa harus mengingat apa sintaks pemformatan tabel atau apa nama variabel dalam konteks pemformatan. Bahkan jika default akan tetap seperti itu, sebuah flag untuk _pre-formatted_ versi yang kurang verbose akan berguna.

Mengenai informasi apa yang dapat dikurangi dari versi yang tidak terlalu bertele-tele, inilah dua sen saya:

  • Nama dan ID untuk sebagian besar kegunaan memiliki tujuan yang sama, dan yang semacam itu dapat dihilangkan.
  • Waktu pembuatan mungkin adalah sesuatu yang Anda akan baik-baik saja dengan dihilangkan dari output yang kurang verbose
  • Saya pribadi juga akan baik-baik saja dengan menghilangkan port dari output yang kurang verbose

Dalam kasus penggunaan saya, saya biasanya hanya ingin mencari nama wadah tempat saya akan menjalankan beberapa perintah lain (misalnya pada node server jarak jauh), dan memiliki output yang dibungkus dalam beberapa baris membuat sulit untuk mengetahui nama persis wadah yang saya minati.

Saya agak kecewa dengan solusi "disetujui" di sini adalah "cukup konfigurasikan alias dengan --format parameter", seolah-olah Anda akan selalu menjalankan perintah ini di lingkungan tempat alias Anda ditentukan, atau ingat sintaks pemformatan dan variabel konteks

Saya masih mengalami masalah ini setiap hari, FWIW. Output docker ps -a saya saat ini adalah _180 karakter_ -- lebih dari setengah layar 4K 27" saya!

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

Rata-rata pengguna tidak diharapkan untuk membuat alias perintah docker ps hanya untuk membuatnya dapat dibaca pada terminal berukuran wajar. Mungkin tidak harus sekecil 80 karakter, tapi yang pasti tidak boleh 180 karakter.

Saya tergoda untuk membuka permintaan tarik sebagai strawman. 😏.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat