Próbuję uzyskać wszystkie porty używane przez kontener Docker za pomocą tego polecenia:
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
Kiedy uruchomiłem go w terminalu, dostałem, że chcę.
$ sudo docker ps | tail -n1 | awk '{print $12}'
0.0.0.0:32783->5432/tcp,
Ale potrzebuję wszystkich mapowanych portów. Czy można wykonać taki skrypt powłoki:
#!/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
Kręciłem się od kilku godzin. Pomóż lub zasugeruj, jak uzyskać dane wyjściowe, takie jak poniżej.
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
źródło
źródło
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)'
Zgodnie ze stronami podręcznika dokera możesz spróbować:
lub jeśli potrzebujesz również identyfikatora:
W dokumentacji nie wspomniano o tym, ale do sformatowania danych wyjściowych należy użyć
{{}}
.Cytat z
man docker-ps
:Docker 1.10.3
Obecnie istnieje kilka przydatnych uwag na temat
{{}}
nawiasów klamrowych wman docker-ps
:źródło
Używanie
awk
z ogranicznikiem pola{2,}
. Dlaczego{2,}
? wyjścieps
używa więcej niż jednej spacji jako separatora między kolumnami. Oznacza to, że możemy użyć tego jako separatoraawk
polecenia.awk -F" {2,}" '{print $6}'
lub na twoje
ps
polecenielub bez
tail
Próbka wyjściowa
lub
źródło
ps
ma inne wyjście.doker ps -q | port dokowania xargs -n1
źródło