Ich versuche, alle von einem Docker-Container verwendeten Ports mit diesem Befehl abzurufen:
sudo docker ps | tail -n1
29ba3137f3e2 java8/local:latest "/bin/bash" 3 hours ago Up 3 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:8443->8443/tcp, 0.0.0.0:32783->5432/tcp, 0.0.0.0:32782->10523/tcp DEMO-20151118124751
Als ich es im Terminal laufen ließ, bekam ich, was ich wollte.
$ sudo docker ps | tail -n1 | awk '{print $12}'
0.0.0.0:32783->5432/tcp,
Aber ich brauche alle zugeordneten Ports. Ist es möglich, ein Shell-Skript wie folgt zu erstellen:
#!/bin/bash
paramnum=$(sudo docker ps | grep $lasttimestamp | wc -w);
text=$(sudo docker ps | tail -n1);
begin=($paramnum-4);
end=($paramnum-1);
for (( i=$end; i>=$begin; i--))
do
t="awk '{print $"$i"}'";
eval "echo $text | $t";
done
Ich habe ein paar Stunden rumgehangen. Bitte helfen Sie oder schlagen Sie vor, wie Sie eine Ausgabe wie unten erhalten.
0.0.0.0:32782->10523/tcp
0.0.0.0:32783->5432/tcp,
0.0.0.0:8443->8443/tcp,
0.0.0.0:8080->8080/tcp,
command-line
bash
docker
R.Chonpisit
quelle
quelle
sudo docker ps | perl -lane '$next=<>&&redo;$,="\n";foreach(@F){/tcp,?$/&&push(@list, $_)};print(@list);last'
sudo docker ps | tail -n 1 | perl -lae '$,="\n";foreach(@F){/tcp,?$/&&push(@x,$_)};print(@x)'
Den Docker-Manpages zufolge könnten Sie Folgendes versuchen:
oder wenn Sie auch einen Ausweis benötigen:
Es wird in der Dokumentation nicht erwähnt, aber um die Ausgabe zu formatieren, müssen Sie es verwenden
{{}}
.Zitat aus
man docker-ps
:Docker 1.10.3
Heutzutage gibt es ein paar nützliche Hinweise zu
{{}}
geschweiften Klammern inman docker-ps
:quelle
Verwendung
awk
mit dem Feldbegrenzer{2,}
. Warum{2,}
? Die Ausgabe vonps
verwendet mehr als ein Leerzeichen als Trennzeichen zwischen den Spalten. Das heißt, wir können dies als Trennzeichen für denawk
Befehl verwenden.awk -F" {2,}" '{print $6}'
oder für Ihren
ps
Befehloder ohne
tail
Beispielausgabe
oder
quelle
ps
hat einen anderen Ausgang.Docker ps -q | xargs -n1 Docker-Port
quelle