Estoy tratando de obtener todos los puertos utilizados por un contenedor Docker con 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
Cuando lo ejecuté en la terminal obtuve lo que quiero.
$ sudo docker ps | tail -n1 | awk '{print $12}'
0.0.0.0:32783->5432/tcp,
Pero necesito todos los puertos asignados. ¿Es posible hacer un 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
He estado dando vueltas por algunas horas. Por favor, ayuda o sugiere cómo obtener un resultado como el siguiente.
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
fuente
fuente
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 acuerdo con las páginas de manual de Docker, puede probar esto:
o si también necesitas identificación:
No se menciona en la documentación, pero para formatear la salida debe usarla
{{}}
.Cita de
man docker-ps
:Docker 1.10.3
Hoy en día, hay algunas notas útiles sobre
{{}}
llaves enman docker-ps
:fuente
Utilizando
awk
con el delimitador de campo{2,}
. ¿Por qué{2,}
? La salida deps
utiliza más de un espacio como separador entre las columnas. Significa que podemos usar esto como separador para elawk
comando.awk -F" {2,}" '{print $6}'
o por tu
ps
ordeno sin
tail
Salida de muestra
o
fuente
ps
tiene otra salida.docker ps -q | xargs -n1 puerto acoplable
fuente