之前用 watchtower 发现必须要:ladder:才能检查镜像,对于国内机器太不友好了。于是我自己搞了个轻量版的,配好 Docker 的镜像加速源就能直接用了。

naomi233/watchducker
43 更新于2025-11-24 15:11:32

一个用 Go 语言编写的 Docker 容器镜像更新检查和自动更新工具

  • 智能检查: 自动检测容器使用的镜像是否有新版本可用
  • 标签驱动: 通过 watchducker.update=true 标签自动管理需要更新的容器
  • 定时执行: 支持使用 cron 表达式进行定时检查
  • 自动更新: 检测到更新后可自动重启容器使用新镜像
  • 灵活控制: 提供只检查不重启的选项
  • 实时反馈: 检查过程中提供实时进度和结果输出
  • Docker 原生: 完全基于 Docker API,无需额外依赖
  • 无需代理: 复用现有 Docker 配置,无需额外配置认证和代理、加速镜像源

示例

# 检查指定容器
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock naomi233/watchducker:latest watchducker nginx redis mysql
# 检查所有带有更新标签的容器
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock naomi233/watchducker:latest watchducker --label
# 只更新镜像,不重启容器
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock naomi233/watchducker:latest watchducker --no-restart nginx redis
# 使用标签模式,同时防止自动重启
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock naomi233/watchducker:latest watchducker --label --no-restart
# 每天凌晨2点检查所有标签容器
docker run --name watchducker -v /var/run/docker.sock:/var/run/docker.sock naomi233/watchducker:latest watchducker --cron "0 2 * * *" --label
# 每30分钟检查指定容器
docker run --name watchducker -v /var/run/docker.sock:/var/run/docker.sock naomi233/watchducker:latest watchducker --cron "*/30 * * * *" nginx redis
# 每天执行,只检查不重启
docker run --name watchducker -v /var/run/docker.sock:/var/run/docker.sock naomi233/watchducker:latest watchducker --cron "@daily" --no-restart nginx

Docker compose yaml 示例

services:
  watchducker:
    image: naomi233/watchducker
    container_name: watchducker
    network_mode: bridge
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
      - WATCHDUCKER_LOG_LEVEL=DEBUG
      - WATCHDUCKER_CRON=0 2 * * *
      - WATCHDUCKER_LABEL=true