仅当具有给定名称的 Docker 容器不存在时,如何执行 Bash 命令?

新手上路,请多包涵

在 Jenkins 机器上,我想创建一个具有指定名称的 docker 容器,前提是它尚不存在(在 shell 脚本中)。我想我可能会运行命令来创建容器,如果有失败则忽略失败,但这会导致我的詹金斯工作失败。

因此,我想知道如何使用 bash 检查 docker 容器是否存在。

原文由 kshah 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 476
2 个回答

您可以通过 <name> 来检查是否存在正在运行的容器,然后像这样启动它:

 [ ! "$(docker ps -a | grep <name>)" ] && docker run -d --name <name> <image>

更好的:

利用 https://docs.docker.com/engine/reference/commandline/ps/ 并检查退出的容器是否阻塞,因此您可以在运行容器之前先将其删除:

 if [ ! "$(docker ps -q -f name=<name>)" ]; then
    if [ "$(docker ps -aq -f status=exited -f name=<name>)" ]; then
        # cleanup
        docker rm <name>
    fi
    # run your container
    docker run -d --name <name> my-docker-image
fi

原文由 ferdy 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想

docker container inspect <container-name> || docker run...

因为 docker container inspect 调用会设置 $?如果容器不存在(无法检查)则为 1,如果容器确实存在则为 0(这尊重已停止的容器)。所以运行命令只会在容器不存在的情况下被调用。

原文由 WiRai 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进