如何检测docker是否以编程方式运行成功?

 手浪用户2602928705 发布于 2023-01-06 15:56

我正在写一个非常简单的bash脚本来快速检查我的容器是否仍然正确构建和启动,内部的应用程序响应请求.

有时docker run失败,例如因为我正在尝试绑定容器的端口已经分配.但是当发生这种情况时docker run,退出代码仍为0,因此我无法使用退出代码.如何以编程方式检查容器是否正确启动?

我正在考虑的解决方案是:

解析输出中的错误

docker ps 查看容器是否正在运行

但这些看起来都有点过分和丑陋.我错过了检查是否docker run成功的更好方法吗?

3 个回答
  • 我们可以用docker exec $id true 2>/dev/null || echo not running.

    此命令不会写入stdout,因为"docker top"会执行此操作.它在容器未运行时写入stderr,与"docker top"相同.

    2023-01-06 15:57 回答
  • 正如AbelMuiño在评论中所建议的那样,这可能已在最近的Docker版本中得到修复(我目前正在运行0.9.1).

    但是,如果你像我一样暂时遇到旧版本,我确实找到了一个不错的解决方法来检查容器是否通过使用启动docker inspect.

    docker inspect返回一个JSON对象,其中包含有关容器的大量信息,特别是容器当前是否正在运行.该-f标志可让您轻松提取所需的位:

    docker inspect -f {{.State.Running}} $CONTAINER_ID
    

    要么

    docker inspect -f "{{.State.Running}}" $CONTAINER_ID
    

    将返回truefalse.

    请注意,您可能希望sleep 1(或更多)在启动容器和检查它是否已启动之间.如果您的设置出现问题,它可能会在实际退出之前显示为"正在运行"很短的时间.

    2023-01-06 15:57 回答
  • 为避免解析任何内容,您可以使用docker top,如果容器未运行,则返回1:

    id=$(docker run mycontainer)
    if ! docker top $id &>/dev/null
    then
        echo "Container crashed unexpectedly..."
        return 1
    fi
    

    2023-01-06 15:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有