docker - 谁负责健康检查?撰写还是容器本身?

标签 docker docker-compose dockerfile

我有一个在 Amazon EC2 实例上运行的 Docker Compose 堆栈,我刚刚了解到您可以直接在 Dockerfile 内进行运行状况检查,因此我想将其添加到我的一个镜像中,就像我看到的这个示例一样:

HEALTHCHECK CMD curl --fail http://localhost:8080/health || exit 1

谁实际运行 curl命令查看服务是否启动?是吗:

  1. Docker Compose 从容器外部运行curl 命令;或
  2. 容器本身,即curl命令在容器内运行?

如果是1,这不应该是http://<service-name>:8080/health反而?使用localhost是否更好, 127.0.0.1service-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/

相关文章:

Dockerfile 复制不适用于 Nextcloud 容器

mysql - 无法在 Docker-Compose 文件中将本地数据库映射到(mysql 镜像中的卷)

shell - 如何检索由 docker-compose.yml 开始的确切容器名称

linux - mac 上的 Docker 权限共享卷

java - 提交在/workspace 中生成的文件的容器更改(即使使用 makefile)不会持续到图像的新实例中

bash - docker:如何在dockerfile中设置端口

Docker:旧版--link参数的等价物是什么

docker-compose build args 未传递给 Dockerfile

Docker 错误 : Cannot create container for service, 没有这样的文件或目录

ruby-on-rails - docker-compose 上的 Ruby on Rails