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

How can a script check if a particular Docker container is running?

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

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

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

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

$ docker ps --filter "name=myapp" --filter "status=running" --quiet
91959ed76e77

只检查是否为运行,我们可以看到输出是否为non-empty:

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

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

$ docker ps -f "name=myapp" -f "status=running" --format "{{.Image}}"
foo/barbaz:latest