Возможно ли получить все идентификаторы запущенных контейнеров в сервисах Docker Swarm?
Я новичок в режиме роя Docker. Если я хочу получить более подробную информацию о моем сервисе роя, из командной строки я могу запустить Docker Service PS "имя службы" или из Docker rest "/v2/services/my-ngx"
[msreddy@swarmnode1 ~]$ docker service ps my-ngx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
voj7fllhnmqb my-ngx.1 nginx:latest swarmnode1 Running Running 26 minutes ago
но он не дал мне идентификатор контейнера. Я хочу отслеживать контейнеры из моей службы роя это возможно?
3 ответа
Идентификатор вернулся docker service ps my-ngx
это <task_id>
Чтобы получить идентификатор контейнера, вы можете использовать docker inspect -f "{{.Status.ContainerStatus.ContainerID}}" <task_id>
Раствор прранай работает отлично. Чтобы поставить это вместе с заданным вопросом (bash):
for f in $(docker service ps -q my-ngx -f desired-state=running);do docker inspect --format '{{.Status.ContainerStatus.ContainerID}}' $f; done
В этом списке перечислены все контейнеры упомянутого сервиса my-ngx
Я оказался здесь, потому что пытался найти узел с заданным идентификатором контейнера. Я сбил это, чтобы сделать это:
#!/bin/sh
docker node ps $(docker node ls -q) -f desired-state=running | sort -u | while read -r taskid widge taskname image host rem ; do echo "$taskid $taskname $image $host `docker inspect -f \"{{.Status.ContainerStatus.ContainerID}}\" $taskid 2>/dev/null`"; done | grep $1
Это медленно, но (без grep) дает идентификатор контейнера для каждой запущенной задачи в рое.