如何基于页面大小为nightscout容器配置Docker健康检查?
Nightscout容器健康检查优化(基于页面大小检测)
问题背景
- 运行
nightscout/cgm-remote-monitor:latest容器时,重启后频繁出现故障,多数情况重启容器即可恢复,少数为数据库异常导致 - 容器内无法正常执行
kill命令,且未预装curl二进制文件 - 容器故障时,通过
wget获取localhost:1337返回约2KB的小文件;正常运行时返回约42KB的完整页面 - 当前健康检查依赖搜索页面中的
Bolus关键词,但该关键词可能因Nightscout配置不同而不存在,需改为基于页面大小的检测逻辑(文件大小小于10KB时判定异常) - 目前通过
willfarrell/autoheal实现故障容器自动重启,原健康检查中的kill命令实际无效但仍保留
当前Docker Compose配置
services: nightscout-app: image: nightscout/cgm-remote-monitor:latest container_name: nightscout depends_on: - nightscout-mongodb user: 1000:1000 environment: - PUID=1000 #optional - PGID=1000 #optional ports: - "1337:1337" volumes: - /docker/log/var/log:/var/log:rw - /etc/localtime:/etc/localtime:ro restart: always privileged: true healthcheck: test: ["CMD-SHELL", "wget -q http://localhost:1337 -O - | grep 'Bolus' || (kill -s 15 1 && sleep 10 && kill -s 9 1)"] interval: 10s timeout: 10s retries: 3 start_period: 20s
优化后的健康检查配置
将健康检查逻辑改为基于页面文件大小判断,同时移除无效的kill命令:
services: nightscout-app: # 其他配置保持不变 healthcheck: test: ["CMD-SHELL", "wget -qO /tmp/ns_healthcheck http://localhost:1337 && [ $(wc -c < /tmp/ns_healthcheck) -ge 10240 ]"] interval: 10s timeout: 10s retries: 3 start_period: 20s
配置说明
- 页面下载与大小检测:
wget -qO /tmp/ns_healthcheck http://localhost:1337:静默下载页面到临时文件/tmp/ns_healthcheckwc -c < /tmp/ns_healthcheck:统计文件的字节数[ $(...) -ge 10240 ]:判断字节数是否大于等于10240(即10KB),满足则健康检查通过(返回0),否则失败(返回非0)
- 移除无效kill命令:由于容器内
kill命令无法正常工作,直接依赖willfarrell/autoheal在健康检查失败时自动重启容器 - 参数调整:可根据实际环境调整
interval、timeout、retries等参数,适配容器的启动速度和故障频率
内容的提问来源于stack exchange,提问作者LostOnTheLine
相关产品推荐
相关产品推荐

