Docker HEALTHCHECK 未按预期工作

Docker HEALTHCHECK not working as expected

我有一个 php 项目来测试健康检查,其中包含三个文件:

index.php

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
    <h1>Hi from container: <?php echo gethostname(); ?> </h1>
 </body>
</html>

health.php

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
  <h1>hi</h1>
 </body>
</html>

Docker 文件:

FROM php:8.0-apache
EXPOSE 80
COPY ["./", "/var/www/html/"]
HEALTHCHECK CMD curl --fail http://localhost/health.php exit 1 

然后我使用 docker run -p 8000:80 phpdemo_local

启动图像

当 运行 dockerfile 启动时,但如果我执行 docker ps 我得到以下信息:

CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS                             PORTS     NAMES
e980991ce911   phpdemo_local:latest   "docker-php-entrypoi…"   42 seconds ago   Up 42 seconds (health: starting)   80/tcp    nice_pare

如果我打开浏览器并浏览到 http://localhost:8000/health.php,我会收到以下响应:hi,这显然是 HTTPStatusCode 200,所以我的健康检查也应该通过,因为我检查状态 200

但由于某种原因 docker ps returns 状态为“开始”,然后最终健康状态变为“不健康”。

我做错了什么?

我觉得指定的 HEALTHCHECK url 无法访问 healthchech ?!?

你需要在curl命令和exit命令之间有||,所以只有在curl失败时才会执行exit。像这样

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