【问题标题】:How do you perform a HEALTHCHECK in the Redis Docker image?如何在 Redis Docker 映像中执行 HEALTHCHECK?
【发布时间】:2021-08-26 11:38:34
【问题描述】:
最近,由于 Redis 无法写入文件系统(不知道为什么是 Amazon EFS),我们遇到了中断,我注意到没有为 Docker 服务设置实际的 HEALTHCHECK 以确保它正常运行, Redis 已经启动,所以我不能简单地使用nc -z 来检查端口是否打开。
有没有可以在redis:6-alpine(或非高山)映像中执行的命令,可以放入docker-compose.yml 文件的healthcheck 块中。
注意,我正在寻找图像中内部可用的命令。不是external healthcheck。
【问题讨论】:
标签:
docker
redis
docker-swarm
【解决方案1】:
如果我没记错的话,那张图片包含redis-cli,那么,也许是这样的:
...
healthcheck:
test: ["CMD", "redis-cli","ping"]
【解决方案2】:
如果您使用包含 redis-cli 的 Redis 映像,也可以将其添加到 Dockerfile 中:
Linux 码头工人
HEALTHCHECK CMD redis-cli ping || exit 1
Windows 泊坞窗
HEALTHCHECK CMD pwsh.exe -command \
try { \
$response = ./redis-cli ping; \
if ($response -eq 'PONG') { return 0} else {return 1}; \
} catch { return 1 }
【解决方案3】:
尽管来自@nitrin0 答案的ping 操作通常有效。它不处理写操作实际失败的情况。因此,我执行的更改只会增加一个我不打算使用的键的值。
image: redis:6
healthcheck:
test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]