1

我的script.sh

#/bin/sh
docker run --name foo 

(假设 docker 命令有效并且容器名称是 foo。不能公开实际命令。)

我有一个运行 docker 容器的脚本。我想检查它是否echo成功运行以及终端上的成功运行状态。

我怎样才能使用container name? 我知道我必须使用类似的东西,docker inspect但是当我尝试添加该命令时,它只会在我^C的脚本之后执行,可能是因为 docker 执行了。

这个答案中,泊坞窗是在其他一些脚本中执行的,因此它实际上不适用于我的用例。

4

3 回答 3

1

Jules Olléon 的链接答案适用于永久运行的服务,如网络服务器、应用程序服务器、数据库和类似软件。在您的示例中,您似乎想要按需运行一个容器,该容器旨在完成一些工作然后退出。在这里,状态没有帮助。

如您的示例所示,在前台模式下运行容器时,它将应用程序返回代码转发给调用外壳。由于您没有发布任何代码,我给您举个简单的例子:我们创建一个rc.sh脚本,返回 1 作为退出代码(通常表示失败):

#!/bin/sh
echo "Testscript failed, returning exitcode 1"
exit 1

它被复制并在此执行Dockerfile

FROM alpine:3.7
COPY rc.sh .
ENTRYPOINT [ "sh", "rc.sh" ]

docker build -t rc-test .现在我们使用并执行一个短暂的容器来构建这个镜像:

$ docker run --rm rc-test
Testscript failed, returning exitcode 1

Bash 给我们返回码$?

$ echo $?
1

所以我们看到容器失败了,可以简单地检查它们,例如在一些带有 if 条件的 bash 脚本中,以便在它失败时执行一些操作:

#!/bin/bash

if ! docker run --rm rc-test; then
    echo "Docker container failed with rc $?"
fi
于 2019-10-16T16:40:41.497 回答
0

运行docker run命令后,您可以通过以下方式检查 docker 容器是否仍在运行:

s='^foo$'

status=$(docker ps -qf "name=$s" --format='{{.Status}}')
[[ -n $status ]] && echo "Running: $status" || echo "not running"
于 2019-10-16T16:38:46.940 回答
0

您只需要使用“-d”执行它即可以分离模式执行容器。有了这个,其他帖子中提供的解决方案或@anubhava提供的解决方案都是很好的解决方案。

docker run -d -name some_name mycontainer
s='^some_name$'
status=$(docker ps -qf "name=$s" --format='{{.Status}}')
[[ -n $status ]] && echo "Running: $status" || echo "not running"
于 2019-10-16T16:57:12.173 回答