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
我有一个 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