Estou tentando obter todas as portas usadas por um contêiner do Docker com este comando:
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
Quando o corri no terminal, consegui o que queria.
$ sudo docker ps | tail -n1 | awk '{print $12}'
0.0.0.0:32783->5432/tcp,
Mas eu preciso de todas as portas mapeadas. É possível criar um script de shell como este:
#!/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
Estou por aqui há algumas horas. Ajude ou sugira como obter uma saída como abaixo.
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
fonte
fonte
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)'
De acordo com as páginas de manual do docker, você pode tentar o seguinte:
ou se você também precisar de um ID:
Não é mencionado na documentação, mas para formatar a saída você precisa usar
{{}}
.Citação de
man docker-ps
:Docker 1.10.3
Atualmente, existem algumas notas úteis sobre
{{}}
chaves emman docker-ps
:fonte
Usando
awk
com o delimitador de campo{2,}
. Por que{2,}
? a saída deps
usa mais de um espaço como separador entre as colunas. Significa que podemos usar isso como separador para oawk
comando.awk -F" {2,}" '{print $6}'
ou por seu
ps
comandoou sem
tail
Saída de amostra
ou
fonte
ps
tem outra saída.janela de encaixe ps -q | porta docker xargs -n1
fonte