Arc*_*ano 4 redis docker docker-swarm
最近,由于 Redis 无法写入文件系统(不知道为什么是 Amazon EFS),我们发生了中断,无论如何我注意到没有为 Docker 服务设置实际的 HEALTHCHECK 以确保它正常运行,Redis 是up 所以我不能简单地nc -z用来检查端口是否打开。
是否有我可以在redis:6-alpine(或非高山)图像中执行的命令,我可以将其放入文件healthcheck块中docker-compose.yml。
注意我正在寻找内部可用的命令在图像。不是外部健康检查。
Arc*_*ano 50
尽管ping@nitrin0 答案的操作通常有效。它不处理写操作实际上失败的情况。因此,我执行了一项更改,仅将值增加到我不打算使用的键。
image: redis:6
healthcheck:
test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
Run Code Online (Sandbox Code Playgroud)
fie*_*edl 35
我刚刚注意到,有一个阶段,redis 仍在启动并加载数据。在此阶段,redis-cli ping显示错误
LOADING Redis is loading the dataset in memory
Run Code Online (Sandbox Code Playgroud)
但仍然返回退出代码0,这将使redis已经报告健康。
也会在此阶段redis-cli --raw incr ping返回0,但实际上并未成功增加此密钥。
作为解决方法,我正在检查是否redis-cli ping实际打印 a PONG,它仅在加载完成后才执行。
LOADING Redis is loading the dataset in memory
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为仅当找到字符串(“PONG”)时才grep返回。0
小智 6
如果我没记错的话,该图像redis-cli可能包含以下内容:
...
healthcheck:
test: ["CMD", "redis-cli","ping"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |