脚本如何检查特定 Docker 容器是否正在运行?

rgo*_*gov 3 docker

我想要一个 shell 脚本来检查特定容器是否正在运行。

例如,如果容器尚未运行,我可能想要启动该容器,或者查询有关它的一些信息,例如公开了哪些端口。

rgo*_*gov 7

docker ps命令使用-f/--filter选项来定位所需的容器。要测试容器是否按名称运行,我们可以尝试

$ docker ps --filter "name=myapp" --filter "status=running"
CONTAINER ID   IMAGE               COMMAND   CREATED          STATUS          PORTS     NAMES
91959ed76e77   foo/barbaz:latest   "/init"   10 minutes ago   Up 10 minutes             myapp
Run Code Online (Sandbox Code Playgroud)

如果我们只想要容器 ID,因为我们要将其传递给另一个命令,例如docker exec,我们可以使用-q/ --quiet

$ docker ps --filter "name=myapp" --filter "status=running" --quiet
91959ed76e77
Run Code Online (Sandbox Code Playgroud)

为了检查它是否正在运行,我们可以查看输出是否非空:

if [ -n "$(docker ps -f "name=myapp" -f "status=running" -q )" ]; then
    echo "the container is running!"
fi
Run Code Online (Sandbox Code Playgroud)

或者,如果我们想要有关它的其他信息,--format

$ docker ps -f "name=myapp" -f "status=running" --format "{{.Image}}"
foo/barbaz:latest
Run Code Online (Sandbox Code Playgroud)