2017-02-22 6 views
0

Я использую Docker Swarm 1.13.1, и было бы очень полезно перечислить службы по имени (A-Z).Как сортировать по имени `docker service ls`

Я не думаю, что Docker поддерживает этот подвиг изначально, поэтому я ожидаю некоторых awk, сорт и другие маленькие хаки.

До сих пор это ближайший я могу получить:

[email protected]:~/deploy-setup# docker service ls | sort -k2,2 -k1 
yru8n6zxmp08 consul   global  4/4  consul:latest 
1lb98n83fttr mysql    replicated 1/1  devmtl/percona-fire:5.7.16-10-1 
ID   NAME    MODE  REPLICAS IMAGE 
i75t4zef8x8c papertrail  global  4/4  gliderlabs/logspout:latest 
4s14t7f13fp8 portainer   replicated 1/1  portainer/portainer:1.11.3 
8wojufyq3dwn resilio   global  4/4  devmtl/resilio-fire:2.4.4-alpine-0 
vn8fhhfvb6pw sematext   global  4/4  sematext/sematext-agent-docker:1.31.11 
mwxtlff6jyl5 thm-s0001-iamfoo replicated 1/1  devmtl/iam-this-ctn:1.0.1-alpine-0 
o8p4q85axkwy thm-s0002-iambar replicated 1/1  devmtl/iam-this-ctn:1.0.1-alpine-0 
wedrfqzkg3zp thm-s0003-caply replicated 1/1  devmtl/nginx-fire:1.10.3-alpine-0 
ql9yapc0brnk thm-s0003-valgo replicated 1/1  devmtl/caddy:0.9.5-alpine-0 
vu3jhyo71oos traefik   replicated 1/1  traefik:v1.1.2-alpine 

или ...

[email protected]:~/deploy-setup# docker service ls | tail -n +2 | sort -k2,2 -k1 
yru8n6zxmp08 consul   global  4/4  consul:latest 
1lb98n83fttr mysql    replicated 1/1  devmtl/percona-fire:5.7.16-10-1 
i75t4zef8x8c papertrail  global  4/4  gliderlabs/logspout:latest 
4s14t7f13fp8 portainer   replicated 1/1  portainer/portainer:1.11.3 
8wojufyq3dwn resilio   global  4/4  devmtl/resilio-fire:2.4.4-alpine-0 
vn8fhhfvb6pw sematext   global  4/4  sematext/sematext-agent-docker:1.31.11 
mwxtlff6jyl5 thm-s0001-iamfoo replicated 1/1  devmtl/iam-this-ctn:1.0.1-alpine-0 
o8p4q85axkwy thm-s0002-iambar replicated 1/1  devmtl/iam-this-ctn:1.0.1-alpine-0 
wedrfqzkg3zp thm-s0003-caply replicated 1/1  devmtl/nginx-fire:1.10.3-alpine-0 
ql9yapc0brnk thm-s0003-valgo replicated 1/1  devmtl/caddy:0.9.5-alpine-0 
vu3jhyo71oos traefik   replicated 1/1  traefik:v1.1.2-alpine 

или это с помощью 2 команды:

[email protected]:~/deploy-setup# echo; \ 
> docker service ls | head -n 1; \ 
> docker service ls | tail -n +2 | sort -k2,2 -k1; echo; 

ID   NAME    MODE  REPLICAS IMAGE 
yru8n6zxmp08 consul   global  4/4  consul:latest 
1lb98n83fttr mysql    replicated 1/1  devmtl/percona-fire:5.7.16-10-1 
i75t4zef8x8c papertrail  global  4/4  gliderlabs/logspout:latest 
4s14t7f13fp8 portainer   replicated 1/1  portainer/portainer:1.11.3 
8wojufyq3dwn resilio   global  4/4  devmtl/resilio-fire:2.4.4-alpine-0 
vn8fhhfvb6pw sematext   global  4/4  sematext/sematext-agent-docker:1.31.11 
mwxtlff6jyl5 thm-s0001-iamfoo replicated 1/1  devmtl/iam-this-ctn:1.0.1-alpine-0 
o8p4q85axkwy thm-s0002-iambar replicated 1/1  devmtl/iam-this-ctn:1.0.1-alpine-0 
wedrfqzkg3zp thm-s0003-caply replicated 1/1  devmtl/nginx-fire:1.10.3-alpine-0 
ql9yapc0brnk thm-s0003-valgo replicated 1/1  devmtl/caddy:0.9.5-alpine-0 
vu3jhyo71oos traefik   replicated 1/1  traefik:v1.1.2-alpine 

Заранее спасибо!

+1

Ну, что там у вас пробовал? – hek2mgl

+0

Привет, Паскаль, я вижу, что у вас работает Portainer, почему бы не отсортировать их непосредственно в пользовательском интерфейсе? :) – Tony

+0

Я развиваюсь в Терминале, и я запускаю все из Терминала. Но да, Portainer по-прежнему отлично подходит для других пользователей :) –

ответ

0

Вы можете использовать awk, чтобы извлечь имя из NAME столбца и отсортировать массив имен генерироваться для печати строки в соответствии с этим приказом:

Для docker service ls, положение names и mode хранится в подстроки имя. Тогда вроде ключа массива (содержащего имена) обрабатывается с asort:

docker service ls | awk ' 
{ 
    if (NR == 1) { 
     print $0 
     names=index($0,"NAME") 
     mode=index($0,"MODE") 
    } 
    else{ 
     key[NR-2]=substr($0,names,mode-1-names) "\t" NR 
     value[NR-2]=$0 
    } 
} 
END { 
    asort(key) 
    for (i=1; i<=(NR-1); i++) { 
     split(key[i],a,"\t") 
     print value[a[2]-2] 
    } 
}' 

Результат печатается в соответствии с порядком отсортированный key массива, который содержит пару [name]\t[index]. Индекс используется для получения строки для печати.

В случае docker ps -a, NAMES последний столбец так мы берем фиксированное значение для длины здесь 100:

docker ps -a | awk ' 
{ 
    if (NR == 1) { 
     print $0 
     names=index($0,"NAME") 
    } 
    else{ 
     key[NR-2]=substr($0, names, 100) "\t" NR 
     value[NR-2]=$0 
    } 
} 
END { 
    asort(key) 
    for (i=1; i<=(NR-1); i++) { 
     split(key[i],a,"\t") 
     print value[a[2]-2] 
    } 
}' 

Регулярно проверяйте this pos т для другого примера asort

Смежные вопросы