我有一个在 Amazon EC2 实例上运行的 Docker Compose 堆栈,我刚刚了解到您可以直接在 Dockerfile 内进行运行状况检查,因此我想将其添加到我的一个镜像中,就像我看到的这个示例一样:
HEALTHCHECK CMD curl --fail http://localhost:8080/health || exit 1
谁实际运行 curl
命令查看服务是否启动?是吗:
- Docker Compose 从容器外部运行curl 命令;或
- 容器本身,即curl命令在容器内运行?
如果是1,这不应该是http://<service-name>:8080/health
反而?使用localhost
是否更好, 127.0.0.1
或service-name
在这样的 Dockerfile 中?有约定吗?
最佳答案
Dockerfiles 提供了一种执行 docker 容器运行状况检查以及 docker compose 的方法,它允许从 docker-compose.yml 文件中为组成应用程序的服务设置运行状况检查,从版本 2.1 开始.
在这两种情况下,健康检查都是由 Docker 守护进程从 Dockerfiles 或 docker compose 执行,该守护进程每 30 秒调用此命令并确定容器是否健康。
特别是,健康检查结果显示在docker ps
命令的STATUS列中,可能有以下结果:
- 0 个健康容器
- 1 个不健康的容器
请引用官方文档https://docs.docker.com/engine/reference/builder/#healthcheck .
关于docker - 谁负责健康检查?撰写还是容器本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76843514/