You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于页面大小为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

配置说明

  1. 页面下载与大小检测:
    • wget -qO /tmp/ns_healthcheck http://localhost:1337:静默下载页面到临时文件/tmp/ns_healthcheck
    • wc -c < /tmp/ns_healthcheck:统计文件的字节数
    • [ $(...) -ge 10240 ]:判断字节数是否大于等于10240(即10KB),满足则健康检查通过(返回0),否则失败(返回非0)
  2. 移除无效kill命令:由于容器内kill命令无法正常工作,直接依赖willfarrell/autoheal在健康检查失败时自动重启容器
  3. 参数调整:可根据实际环境调整interval、timeout、retries等参数,适配容器的启动速度和故障频率

内容的提问来源于stack exchange,提问作者LostOnTheLine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:15:42