J'essaie d'obtenir tous les ports utilisés par un conteneur Docker avec cette commande:
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
Quand je l'ai exécuté dans le terminal, j'ai eu envie.
$ sudo docker ps | tail -n1 | awk '{print $12}'
0.0.0.0:32783->5432/tcp,
Mais j'ai besoin de tous les ports mappés. Est-il possible de faire un script shell comme celui-ci:
#!/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
Je traîne depuis quelques heures. Veuillez aider ou suggérer comment obtenir une sortie comme ci-dessous.
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
la source
la source
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)'
Selon les pages de manuel de docker, vous pouvez essayer ceci:
ou si vous avez également besoin d'une pièce d'identité:
Il n'est pas mentionné dans la documentation, mais pour formater la sortie, vous devez l'utiliser
{{}}
.Citation de
man docker-ps
:Docker 1.10.3
De nos jours, il y a quelques notes utiles sur les
{{}}
accolades dansman docker-ps
:la source
Utilisation
awk
avec le délimiteur de champ{2,}
. Pourquoi{2,}
? la sortie deps
utilise plus d'un espace comme séparateur entre les colonnes. Cela signifie que nous pouvons l'utiliser comme séparateur pour laawk
commande.awk -F" {2,}" '{print $6}'
ou pour votre
ps
commandeou sans
tail
Exemple de sortie
ou
la source
ps
a une autre sortie.docker ps -q | Port docker xargs -n1
la source