Die Ausgabe von docker ps
ist auf 80 Zeichen breiten Terminals sehr schwer zu lesen.
/bin/ps
macht einen ziemlich guten Job beim Umschließen der Ausgabe auf schmalen Terminals (zB wichtige Informationen zuerst, Befehl zuletzt und abschneiden). Ich frage mich, ob wir es besser machen können.
So viel Liebe und viele +1. Ich verwende 80x24 Terminals (sehr zum Leidwesen von
meine Kollegen) und dieser hat mich schon seit einiger Zeit gereizt
Zeit.
Ich muss sagen, das erwischt mich auch oft.
Irgendwelche Ideen für eine Lösung? Eine kleinere Version auf schmaleren Terminals zu haben, klingt gut.
Nun, ID muss nicht wirklich da sein.
Wie wäre es damit:
NAME IMAGE STATUS PORTS COMMAND
prickly_perlman ubuntu:14.04 Up 15s 8000->8000/tcp sleep 30000
Erläuterung:
/bin/ps
@bfirsh :thumbsup: mit diesen Anmerkungen;
--no-trunc
, da die Container-ID jetzt nicht mehr sichtbar ist? Es gibt viele Beispiele, die sich auf diese Funktion verlassen, um angehaltene Container zu bereinigen--columns=a,f,g
--sort=a,e
-a
))Was ist falsch an der Leitung zu einem Pager?
docker ps | less -S
@benjamin-thomas oder docker ps
erkennt ein TTY und leitet standardmäßig an less -S
?
Netter Trick @benjamin-thomas , den werde ich in Zukunft auf jeden Fall anwenden. Eine Überlegung ist, dass Informationen, die mir wichtig sind, ausgelassen werden, vor allem Containernamen. Wobei ich mich in meinem Anwendungsfall normalerweise nicht so sehr auf zB CREATED
und STATUS
interessiere.
IMO kann der Anwendungsfall von Benutzer zu Benutzer variieren, für mich ist STATUS
_ist_ wichtig, um schnell zu überprüfen, ob meine Container noch gut laufen oder ein "Whoopsie" gemacht haben.
Ich bin mir nicht wirklich sicher, ob dies eine große Neuimplementierung der ps-Ausgabe werden soll oder _starten_, indem sie standardmäßig etwas sauberer gemacht und darauf aufgebaut wird, indem sie durch Hinzufügen von Optionen zum Angeben von anzuzeigenden Spalten und Sortierreihenfolge konfigurierbarer gemacht wird und Filterung.
@nathanleclaire , verwenden Sie einfach Ihre Pfeiltasten, sobald Sie sich in less
, Sie haben Zugriff auf den gesamten Inhalt. Oder habe ich dich falsch verstanden?
@grahamc warum nicht, persönlich bevorzuge ich Tools, die diese Dinge nicht automatisch tun. Man könnte immer einen Shell-Alias für diese IMO definieren, wenn dies erforderlich ist.
@thaJeztah Die Angabe der Spaltennamen mit Schaltern macht für mich Sinn, wie der System-PS-Befehl /bin/ps -o pid,ruser=RealUser -o comm=Command
.
@benjamin-thomas Oh, das war mir noch gar nicht bewusst. Schön! Diese Lösung gefällt mir sehr gut.
@benjamin-thomas /bin/ps
macht dies automatisch. Wenn Sie es deaktivieren möchten, können Sie es über cat
oder was auch immer weiterleiten.
Bezogen auf die Breite der Ausgabe von docker ps
: Ist es wirklich notwendig, jede mögliche Kette von Verknüpfungen zu einem bestimmten Container als neuen Namen für diesen Container zu behandeln? Wenn ich beispielsweise fünf Container mit den Namen A, B, C, D und E habe und A auf B, B auf C usw. verweist, dann hat E fünf verschiedene Namen: E, D/E, C/ D/E, B/C/D/E und A/B/C/D/E.
Wenn B dann auch auf beispielsweise D verweist, bekommt E noch MEHR Namen: B/D/E und A/B/D/E. Ein Lauf des Systems, an dem ich arbeite, startet siebzehn Container – die alle zusammen aufgrund von 31 Abhängigkeitsbeziehungen _dreihundertsiebenundachtzig Namen_ haben. Egal wie breit ich meine Terminalfenster mache, die Ausgabe von docker ps
ist ohne Pager nicht lesbar. Ist es wirklich sinnvoll, dass die Anzahl der Namen bei der Anzahl der Container _schlechter als quadratisch_ ist? Es wäre zumindest schön, wenn es eine Möglichkeit gäbe, diese pedantische Aufzählungsebene zu deaktivieren.
@mraccident :+1: docker ps
sollte nur den primären Namen anzeigen , nicht alle Namen für diesen Container
Salut, es hat mich auch gestört und ich habe gerade Docker eine '--short'-Option hinzugefügt. die komplette Port-Spalte behalten.
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.
$
Da ich ein Neuling bin, denke ich, dass mein Code ... optimiert ...
Aber erstaunlich, wie einfach es ist, den Code als langjähriger Python-Typ zu ändern. Ich mag das!
EDIT: Vielleicht könnte man die Größe des Terminals abrufen und Spalten rausschmeißen, um die Zeilen zu verkürzen ...
EDIT2: Ich habe die NAMEN gekürzt und eine Zählung (KINDER) hinzugefügt, auch wenn es etwas irreführend ist, da es auch fd3->fd2->fd1 zählt.
$ ~/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: Jetzt extrahiere ich den richtigen Namen
$ ./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
Ich glaube, dass die Port-Definition und die Ausführlichkeit der Zeit einen großen Teil der Breite der Ausgabe von docker ps
ausmachen. Ich denke, das Kürzen der Zeiten und das Umbrechen der Portdefinitionen über Zeilen würde viel Platz sparen (zusätzlich dazu, dass ich Spalten auswählen/ausblenden kann).
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
Wie wäre es, wenn Sie beispielsweise erlauben, eine Vorlage bereitzustellen, indem Sie eine Umgebungsvariable DOCKER_PS_FORMAT
mit columname:width :modifier, columname:width :modifier, ...
wobei modifier
zusätzliche Einstellungen wie no-trunc
, full
(zum Beispiel für Container-ID) oder short
für CREATED
zulassen könnte, wobei ~1h
könnte eine Kurzform für About an hour ago
.
Ich habe diese bash/zsh-Funktion in meinem ~/.bashrc
, um die Ausgabe von docker ps
besser anzuzeigen. Sie können die Spalten ausblenden oder neu anordnen:
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 $@; }
Problemumgehungs-Hack. Ändern Sie wie gewünscht, welche $cols[x] Sie behalten möchten.
docker ps | perl -ne '<strong i="6">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'
Wäre es nicht einfacher, so etwas zu haben:
$ docker ps --columns=name,id,status,image
und jeder könnte einfach docker ps
.
Danke, @caiguanhao. Clevere Zwischenlösung. Es wurde als Tackle-Plugin für die Fischmuschel hinzugefügt.
Leute , @caiguanhao vorgenommen , um auswählen zu können, welche Spalten
https://github.com/jpmelos/dotfiles/commit/457a9c68f87eb5bd455aa22bdadab81c2651c2ea
Eine einfache Änderung, die ein wenig helfen würde, besteht darin, den Abstand zwischen den Spalten CONTAINER ID und IMAGE zu verringern. Die anderen Spalten sind alle durch 3 Leerzeichen getrennt, aber diese beiden sind durch 8 getrennt.
Meine 5 Cent, bis sie 'Docker ps' lesbar machen:
Werden wir dazu ein Update sehen?
docker ps
ist meiner Meinung nach der gebräuchlichste Befehl. Ich hoffe, es ist nicht so schwer, uns die Option zum Filtern von anzuzeigenden Spalten zu geben.
(Ich würde so etwas wie zu erwarten , dass )
Wie @AntouanK sagte und @wpp bereits vorgeschlagen hat, wird ein Spalten-Flag für die meisten Situationen bevorzugt
Ich denke, #10255 sollte dies ansprechen.
@duglin Macht dies die Standardeinstellung jedoch kürzer? Ich würde das gerne offen lassen, wenn nicht.
@bfirsh guter Punkt, nein, es würde die Standardeinstellung nicht ändern. Aber ich bin mir nicht sicher, ob wir den Standard bis v2 ändern können (wenn / wann das ist), da wir sonst bestehende Clients zerstören würden.
Ich auch. vielleicht ein intelligenter Mechanismus, der die angezeigten Standardspalten auswählt, indem Schwellenwerte auf ENV['COLUMNS'] angewendet werden?
Ich stimme https://github.com/docker/docker/issues/7477#issuecomment -70243594 zu, geben Sie uns einfach die Möglichkeit, die Spalten auszuwählen.
Ich stimme auch für die Option https://github.com/docker/docker/issues/7477#issuecomment -70243594.
docker ps
wäre docker ps --columns=id,image,command,created,status,ports,name
und es könnte leicht sein, weitere Spalten wie ip
zu implementieren, wie einige Benutzer es wollten https://github.com/docker/docker/issues/8786
+1 für --Spalten
Als Workaround kombiniere ich docker ps -q
mit docker inspect --format
:
docker ps -q | xargs docker inspect --format '{{printf "%.12s\t%s" .Id .Config.Cmd}}'
Sie müssen in die Ausgabe von Docker Inspect und Golang-Templating eintauchen, aber es ist fast unendlich konfigurierbar.
@jafcrocker Schön. Vielleicht können wir eine öffentliche Zusammenfassung erstellen, um eine Sammlung von Problemumgehungen wie diese hier zu speichern? Bis wir einige Flags haben, um die Ausgabe richtig anzupassen...
Wir haben gerade #14699 zusammengeführt, mit dem Sie docker ps --format ...
ausführen können, um die ps-Ausgabe zu ändern. Sie können auch ein Standardformat festlegen, wenn Sie möchten, sehen Sie sich diesen Screenshot an:
Ich werde dieses Problem als behoben schließen. Bitte probieren Sie es aus und teilen Sie uns Ihre Meinung mit.
Für diejenigen, die es ausprobieren möchten, finden Sie "Master"-Builds unter https://master.dockerproject.org und diese Funktion sollte bald verfügbar sein (wenn nicht bereits).
Obwohl das --format
eine wirklich nette Ergänzung ist, denke ich nicht, dass dies das Hauptproblem löst. Fast alle Befehlszeilentools, die ich täglich verwende, verarbeiten Terminals mit variabler Größe ordnungsgemäß. Meistens, indem Sie sich die Umgebungsvariable $COLUMNS
ansehen und den entsprechenden Text anzeigen.
Beispiel: ps aux
in einem 80x24-Terminal:
Und in einem 137x24-Terminal:
Es ändert die Spaltenbreite und verkürzt den Befehl, sodass alles gut in eine Zeile passt. Alles für die Lesbarkeit und für einen Menschen leicht zu analysieren.
Sicher, ich kann einen Bash-Wrapper schreiben, der je nach $COLUMNS
unterschiedliche Formatierungsoptionen anwendet, aber es hört sich wirklich hackig an und sollte meiner Meinung nach Standardverhalten für jedes Befehlszeilenprogramm sein. Es tut mir leid zu sagen, dass die Ausgabe von Docker unordentlich und schwer zu lesen ist.
Gibt es einen Grund, warum dies nicht getan wird? Irgendeine Einschränkung in einer Bibliothek oder eine Entscheidung Ihrerseits? Ich muss wissen, ob es sich lohnt, dies in einer PR zu beheben, oder ob ich vielleicht den falschen Baum belle.
@nsg : Einverstanden - die Standardausgabe könnte noch verbessert werden.
Gab es zu diesem Thema ein Update?
Aus welchem Grund auch immer, Bild-Hashes werden in der ps-Ausgabe nicht mehr abgeschnitten. Ich musste mein Terminal schon in der Vergangenheit ultrabreit machen (den ganzen Bildschirm einnehmen), nur um Docker nutzbar zu machen, jetzt reicht das nicht mehr. Ab 1.7.1 ist jede Zeile etwa 200 Spalten breit. Wer nutzt ein so breites Terminal?
Ich habe ein bisschen damit herumgespielt.
Das Entfernen von ID und erstellt führt uns ein wenig dorthin:
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"
Allerdings noch zu lang. Wir könnten 0.0.0.0
ignorieren:
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"
Aber noch etwas lang. Vielleicht ist etwas Kreativität erforderlich, um den Status zu verkürzen... etwas parsbares/scanbares, aber immer noch kurzes... Exit (2) 23s ago
vielleicht?
Obwohl der Befehl gekürzt werden kann, müssen wir auch alles andere kürzen, um sicherzustellen, dass mindestens _einige_ des Befehls angezeigt wird. Kann den Namen nicht kürzen. Das Bild könnte möglicherweise ein "..." erhalten, wenn es abgeschnitten ist. Gleiches gilt für lange Ports.
Die Gedanken?
Einige Hacks sind hier: https://github.com/docker/docker/compare/master...bfirsh :7477-shorter-ps
@bfirsh Ich denke, du bist auf der
Wenn Sie den Status (wie Sie sagten) auf 23 statt auf 23 Sekunden ändern und sowohl die Bild- als auch die Port-Spalte abschneiden, sollte sie kurz genug sein.
@bfirsh Sie beginnen in der Standardansicht zu arbeiten? Denken Sie über die Option --format
manche Leute sprechen?
Außerdem könnten wir s
anstelle von sec
und m
anstelle von mins
@aanm wir haben bereits die --format
in Docker 1.8. Sie können auch das Standardverhalten von ps in der Client-Konfigurationsdatei ändern, indem Sie Folgendes hinzufügen:
{
"psFormat": "table {{ .ID }}\\t{{ .Status }}"
}
Sie können Ihre Standardeinstellung mit dem Format festlegen, das Ihnen besser gefällt.
Ich muss oft den aktuellen Containernamen sehen, um als nächstes docker exec
auszuführen, um es anzuhängen.
Also, ich hoffe, wenn ich NAMES
nach IMAGE
, wird es gut, ich brauche keine Konfiguration mehr.
Danke.
Problem in Docker 1.8.1 (fc21)
--format kennt keine Containernamen.
docker ps --format "{{.ID}}t{{.Image}}t{{.CreatedAt}}t{{.RunningFor}}t{{.Status}}t{{.Name}}" -a
Vorlagen-Parsing-Fehler: Vorlage: :1:64: Ausführen von "" bei <.Name>: Name ist kein Feld vom Strukturtyp *ps.containerContext
Bisher verwendet:
docker ps -a | perl -ne 'chomp; @cols = split /s{2,}/, $_; $name=pop @cols; printf "%-28s %-20s %-20s %-30sn", $name, $cols[1], $cols[3], $cols[4]'
@parf der Platzhalter heißt eigentlich Names
:
danke an @caiguanhao für die Inspiration.
ich lasse das einfach hier:
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
Schön @GottZ , danke fürs Teilen!
@thaJeztah Ich habe gerade jede gerade Linie fett gewährleisten . viel spaß :lächeln:
Inzwischen mein Ansatz mit 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 warum nicht einfach;
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}"
Dieser wurde bereits festgeschrieben und freigegeben. Ich verstehe nicht, warum ist das noch offen?
@thaJeztah du hast recht, danke :)
@ovidiub13 hauptsächlich wegen https://github.com/docker/docker/issues/7477#issuecomment -123898874
ja das ist nervig..
Normalerweise kann ich nur das Standard-PS an der Breite der Terminalspalten abschneiden:
dps() {
docker ps | cut -c-$(tput cols)
}
+1 für --columns=name,id,status,image
Dieses Problem besteht leider immer noch. Wie auch immer, eine Problemumgehung besteht darin, Folgendes (in Ubuntu getestet) in Ihr .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'
Das Laufen von watchdocker
gibt:
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 }}'
gibt Ihnen dies, ohne all diese API-Aufrufe für jeden Container durchzuführen .
Sie können dies auch in ~/.docker/config.json
, um es zum Standardformat zu machen
@cpuguy83 welche Version unterstützt das? Ich habe es nie geschafft, das zum Laufen zu bringen, weder bei der Arbeit noch zu Hause. Wäre cool, wenn in der Dokumentation erwähnt würde, welche Version was unterstützt.
@Pithikos Entweder 1,8 oder 1,9, nicht sicher.
Docker ps/images an 80 Spalten anpassen
Die korrekte Verwendung ist mit dem Schlüsselwort "table" in der Formatzeichenfolge, dies gibt Ihnen eine schöne Formatierung docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}"
Abstand
Ich schließe diesen, da es den Anschein hat, dass das --format
Flag für ps
das Problem behebt. Danke an alle!
Dieses Problem war vielleicht nicht gut benannt. Es bleibt weiterhin, dass der _default_ für Befehle 80 Zeichen breit sein sollte. Ich bin froh, dass dies geschlossen ist, weil es nicht so wichtig ist.
--format
scheint nicht gut genug zu sein.
https://docs.docker.com/engine/reference/commandline/ps/#/formatting
Wie wäre es mit einer Option zum Hinzufügen einer vertikalen Ergebnisanzeige, wie select * from foobar\G
in MySQL?
Normalerweise möchte ich nur wissen, welche Container laufen (und wie lange).
Das funktioniert bei mir:
$ docker ps --format "table {{.Names}}\t{{.Status}}"
Noch besser, ich habe es in einen wirklich leicht zu merkenden Alias verpackt:
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}"'
Hier ist ein Beispiel für die Ausgabe:
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
Hier erfahren Sie mehr über den Befehl --format
:
https://docs.docker.com/engine/reference/commandline/ps/
Hoffe es hilft jemandem 😃
@joshmedeski Sie können Ihre bevorzugte Formatierung auch in einer Konfigurationsdatei speichern, damit sie als Standard verwendet wird; https://docs.docker.com/engine/reference/commandline/cli/#/configuration -files
Im Sinne des Sparens von Tastenanschlägen ist hier das kleine Bash-Skript, das ich geschrieben habe, um eine Liste von Argumenten zu erstellen, den go-Template-String zu erstellen und den docker ps-Befehl auszuführen, um sofort alle gewünschten Spalten in beliebiger Reihenfolge anzuzeigen. Das Einfügen der Konfiguration in eine Datei ist nicht dynamisch genug - ich finde, dass es ziemlich nützlich ist, einen Satz von Spalten in einem Moment und einen anderen Satz einen Moment später zu haben. Das Skript ist hier , hoffe es ist für jemanden nützlich. Prost -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)
füge dies in deine ~/.docker/config.json ein
{
"psFormat": "table {{.Names}}\\t{{.Image}}\\t{{.RunningFor}} ago\\t{{.Status}}\\t{{.Command}}",
"imagesFormat": "table {{.Repository}}\\t{{.Tag}}\\t{{.ID}}\\t{{.Size}}"
}
Und nach Belieben modifizieren. Für mich war das Problem immer ein langer Bildname (da er meinen persönlichen Repository-Namen für meine benutzerdefinierten Bilder enthielt)
Jeder, der nach einem besseren Docker PS sucht, sollte dies überprüfen:
https://github.com/moncho/dry
Problemumgehungs-Hack. Ändern Sie wie gewünscht, welche $cols[x] Sie behalten möchten.
docker ps | perl -ne '<strong i="7">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'
Danke.
Das war alles was ich brauchte:
docker ps | perl -ne '<strong i="12">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s", $cols[1], $cols[4], $cols[6]'
BILDSTATUSNAMEN vergeben
in gut ausgerichteten Spalten
BEARBEITEN
es ist besser, einen Bash-Alias mit etwas wie diesem zu erstellen:
docker ps --format="table {{.Image}}\t{{.Status}}\t{{.Ports}}\t{{.Names}}"
Beachten Sie das "Tabellen"-Format
Problemumgehungs-Hack. Ändern Sie wie gewünscht, welche $cols[x] Sie behalten möchten.
docker ps | perl -ne '<strong i="7">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'
Das ist toll, danke
@nagracks Wenn Sie dieses Format als Standard verwenden möchten, empfehle ich die Verwendung des --format
Ansatzes (der in Ihrer ~/.docker/config.json
Konfigurationsdatei gespeichert werden kann).
Wenn ich meine .docker/config.json
Datei mit etwas benutzerdefiniertem wie folgt ändere:
"imagesFormat": "table {{.ID}} {{.Repository}}\t{{.Tag}} {{.CreatedSince}} {{.Size}}",
"psFormat": "table {{.ID}} {{.Names}}\t{{.Image}} {{.Command}} {{.Status}}",
Wie kann ich dann den Befehl docker ps
, um das Standardformat anzuzeigen? Ich habe es mit docker ps --format ""
versucht, aber es hat immer noch die config.
Die Verwendung von docker ps --format=table
sollte das Standardtabellenformat ergeben
Ich würde mich sehr freuen, wenn standardmäßig eine weniger ausführliche Version der Ausgabe verfügbar wäre, ohne sich an die Tabellenformatierungssyntax oder die Variablennamen im Formatierungskontext erinnern zu müssen. Selbst wenn der Standard so beibehalten würde, wie er ist, wäre ein Flag für eine _vorformatierte_ weniger ausführliche Version nützlich.
Welche Informationen von einer weniger ausführlichen Version reduziert werden könnten, hier sind meine zwei Cent:
In meinem Anwendungsfall möchte ich normalerweise nur den Namen des Containers nachschlagen, für den ich andere Befehle ausführen werde (z. B. auf einem Remote-Serverknoten), und wenn die Ausgabe über mehrere Zeilen gewickelt wird, ist es schwierig, die genauer Name des Containers, der mich interessiert.
Ich bin etwas enttäuscht, dass die "genehmigte" Lösung hier "einfach einen Alias mit dem Parameter --format konfigurieren" lautet, als ob Sie diese Befehle immer in Umgebungen ausführen würden, in denen Sie Ihren Alias definiert haben, oder sich an die Formatierungssyntax und die Kontextvariablen erinnern
Ich stoße immer noch täglich auf dieses Problem, FWIW. Meine aktuelle Ausgabe von docker ps -a
ist _180 Zeichen breit_ – mehr als die Hälfte meines 27" 4K-Bildschirms!
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
Vom durchschnittlichen Benutzer sollte nicht erwartet werden, dass er seinen docker ps
Befehl mit einem Alias bezeichnet, nur um ihn auf einem Terminal mit angemessener Größe lesbar zu machen. Es muss vielleicht nicht so klein wie 80 Zeichen sein, aber es sollte auf keinen Fall 180 Zeichen lang sein.
Ich bin versucht, als Strohmann einen Pull-Request zu eröffnen. 😏.
Hilfreichster Kommentar
Was ist falsch an der Leitung zu einem Pager?