Я пытаюсь получить все порты, используемые контейнером Docker, с помощью этой команды:
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
Когда я запустил его в терминале, я получил, я хочу.
$ sudo docker ps | tail -n1 | awk '{print $12}'
0.0.0.0:32783->5432/tcp,
Но мне нужны все сопоставленные порты. Можно ли сделать скрипт оболочки следующим образом:
#!/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
Я слонялся несколько часов. Пожалуйста, помогите или предложите, как получить вывод, как показано ниже.
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
источник
источник
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)'
Согласно справочным страницам докера вы можете попробовать это:
или если вам также нужен ID:
Это не упоминается в документации, но для форматирования вывода вы должны использовать
{{}}
.Цитата из
man docker-ps
:Докер 1.10.3
В настоящее время есть несколько полезных заметок о
{{}}
фигурных скобках вman docker-ps
:источник
Использование
awk
с разделителем полей{2,}
. Почему{2,}
? выводps
использует более одного пробела в качестве разделителя между столбцами. Значит, мы можем использовать это как разделитель дляawk
команды.awk -F" {2,}" '{print $6}'
или для вашей
ps
командыили без
tail
Образец вывода
или
источник
ps
есть другой выход.докер ps -q | док-порт xargs -n1
источник