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.
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:
/bin/ps
@bfirsh :thumbsup: dengan catatan ini;
--no-trunc
, sekarang container-id tidak lagi terlihat? Ada banyak contoh yang mengandalkan fitur ini untuk membersihkan kontainer yang berhenti--columns=a,f,g
--sort=a,e
-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:
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 )
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:
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:
Dan di terminal 137x24:
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]'
@parf placeholder sebenarnya disebut Names
:
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.
muat docker ps/images ke 80 kolom
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.
--format
tampaknya tidak cukup baik.
https://docs.docker.com/engine/reference/commandline/ps/#/formatting
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:
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. 😏.
Komentar yang paling membantu
Apa yang salah dengan pemipaan ke pager?