如何使用Shell脚本获取正在启动的容器信息

動機

我想获取正在运行的多个容器的容器名称等信息,并进行了验证。

环境

    • Ubuntu 20.04

 

    • Docker version 20.10.14

 

    Docker Compose version v2.4.1

“脚本”

每个正在运行的容器都会显示容器ID和容器名称。

#!/bin/bash
for contanier in `docker ps -q --format '{{.ID}},{{.Names}}'`; do

  # カンマ区切りをリスト化
  list=(${contanier//,/ })

  # リストの表示
  # echo ${list[@]}

  # コンテナIDと名前を取得
  contanier_id=${list[0]}
  contanier_name=${list[1]}

  echo ${contanier_id} ${contanier_name}

done

构建测试容器

我会构建10个适当的Nginx容器。

#!/bin/bash
# 構築するコンテナの数
num=10
# 指定した数だけコンテナを構築
for i in `seq 1 ${num}`
do
contanier_name=nginx_${i}
docker run --name ${contanier_name} -d nginx
done

确认已构建的容器。

docker ps -a
CONTAINER ID   IMAGE                      COMMAND                  CREATED              STATUS              PORTS                                   NAMES
b92f31fca31f   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_10
7e7d46aed8f5   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_9
54ae367b6c9c   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_8
d0881a7a8f5b   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_7
1ad4fe86c8e7   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_6
bccf446ebe9e   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_5
de1638f5ed11   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_4
e550e98095f7   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_3
1462f40996bf   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_2
d9659cce21fb   nginx                      "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                  nginx_1

运行脚本

./contanier-list.sh

我可以确认容器的ID和名称。

b92f31fca31f nginx_10
7e7d46aed8f5 nginx_9
54ae367b6c9c nginx_8
d0881a7a8f5b nginx_7
1ad4fe86c8e7 nginx_6
bccf446ebe9e nginx_5
de1638f5ed11 nginx_4
e550e98095f7 nginx_3
1462f40996bf nginx_2
d9659cce21fb nginx_1

打掃

你可以使用以下的脚本来删除刚刚构建的Nginx容器。我们尝试使用–filter选项进行过滤。

#!/bin/bash
for contanier in `docker ps -q --filter "name=nginx" --format '{{.ID}}'`; do

  # カンマ区切りをリスト化
  list=(${contanier//,/ })

  # リストの表示
  # echo ${list[@]}

  # コンテナIDと名前を取得
  contanier_id=${list[0]}
 
  docker stop ${contanier_id}
  docker rm ${contanier_id}

done

我会确认是否已被删除。

docker ps -a

你已经成功删除了。

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

总结

我已经能够使用Shell脚本显示正在运行的多个容器的信息。
通过docker ps命令的–format选项,我们可以获取各种信息,因此可以查看更详细的信息。

广告
将在 10 秒后关闭
bannerAds