gpt4 book ai didi

docker - 如何检查所有 docker-compose up 服务是否成功启动?

转载 作者:行者123 更新时间:2023-12-01 00:20:36 25 4
gpt4 key购买 nike

如何查看docker-compose up的服务是否正常成功启动?

上下文:我将 CI 添加到我的项目中,作为其中的一部分,我想让我的 CI 构建 docker 镜像并执行 docker-compose命令查看是否所有服务都可以成功启动,然后再进入 CI 的下一阶段。

我在想我应该做些什么来达到以下效果:

$ docker build -t myimage 。
$ docker-compose up -d

# 尝试对状态为“退出”的图像进行计数,如果大于 1,则返回 1
# 如果图像名称包含子字符串“Exit”但运行正常,会发生什么?
$ if [[ $(docker-compose -f docker-compose-local.yml ps | grep "退出"| wc -l) -ne 0 ]];然后返回1;菲

我怀疑是通过ps寻找容器的状态subcommand 不是很好,并且有更好的解决方案。我找过,但没有找到。

docker 容器有哪些可能的状态? docker docks不要提及可能的状态。

最佳答案

您也许可以尝试使用自定义 HEALTHCHECK 运行命令,它可以将状态写入临时文件或其他内容,CI 进程可以检查该状态,然后终止容器。
HEALTHCHECK也会导致每个容器的健康状态存储在各自的health_statusdocker inspect 的输出中的字段,这对您来说可能比 docker ps 更容易.

更一般地说,我曾在一些应用程序中工作过,在这些应用程序中我们创建了一种我们称之为“冒烟测试”的测试——与完全验收测试非常相似,除了它仍然可以使用某些类型的人工或夹具数据。但是对 Web/容器应用程序的实际请求是真实的。

然后你要做的是有一个脚本来启动你的容器集,然后针对这些容器支持的任何应用程序(例如数据库查询、http 请求等)执行测试套件。

通常,您可以为此重用您选择的语言中的单元测试框架。就我而言,我们使用了 pytest编写一些基于 Python 的烟雾测试……启动所有容器,然后用各种已知正确响应的人工请求来攻击它们。如果 Python 测试过程成功退出,则整体测试通过,并且会关闭容器。

我喜欢这种方法,因为这样“检查所有 docker-compose up 服务是否成功启动”的定义就像其他任何测试一样变成了一些自动化测试,并且它被 checkin 到源代码的某个地方。如果应用程序发生变化,您相应地更改测试,否则它们会导致构建失败。

而如果你使用了一个简单的 HEALTHCHECK命令,您可能会获得虚假信息。也许容器看起来启动并运行,但是如果某个数据资源,或远程连接等在启动时没有成功,除非你的HEALTHCHECK否则你不会知道。明确涉及验证它。

实际上,仅仅知道容器已启动并正在运行很少重要。相反,通常重要的是一些“真实”测试套件,这些测试会影响正在运行的容器,并证明在真实用例场景中运行所需的一切实际上都在正常工作。

关于docker - 如何检查所有 docker-compose up 服务是否成功启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com