Docker 部署 Watchtower 容器自动更新工具 🔄
📋 目录导航
🎯 项目简介
Watchtower
是一款轻量级的 Docker 容器自动更新工具,能够监控运行中的容器并在检测到基础镜像更新时自动拉取新镜像、重启容器。结合 Docker 部署,您可以在任何支持 Docker 的平台(Linux、Windows、macOS、NAS 等)上轻松实现容器化应用的自动维护,确保服务始终运行在最新版本。
🛠️ 核心特性
| 特性类别 |
功能描述 |
优势 |
| 🔄 自动检测 |
定期检查容器镜像更新 |
无需手动干预,自动发现新版本 |
| ⚡ 无缝更新 |
拉取新镜像并重启容器 |
服务更新过程平滑,减少停机时间 |
| 🗑️ 资源清理 |
可选清理旧镜像功能 |
避免磁盘空间被无用镜像占用 |
| ⏰ 灵活调度 |
支持自定义检查计划 |
根据需求设置更新频率和时间 |
| 🎯 精确控制 |
支持容器筛选更新 |
可更新所有容器或仅更新指定容器 |
| 🛡️ 安全可靠 |
保持原有配置不变 |
更新后容器配置与更新前完全一致 |
| 📊 状态监控 |
提供详细更新日志 |
清晰掌握容器更新历史 |
🐳 一、Docker 部署 Watchtower
根据您的需求,我们提供两种部署方案:更新所有容器或仅更新指定容器。
方案一:更新所有容器 🌐
此方案将监控并更新宿主机上所有运行的 Docker 容器(除非特别排除)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 创建部署目录和 docker-compose.yml 文件
mkdir -p /mnt/mydisk/home/watchtower && cd $_ && \
cat > docker-compose.yml <<'EOF'
services:
watchtower:
container_name: watchtower
image: containrrr/watchtower:latest
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai # 设置时区
- WATCHTOWER_CLEANUP=true # 更新后清理旧镜像
- WATCHTOWER_SCHEDULE=0 0 2 * * * # 每天凌晨2点执行检查
- WATCHTOWER_DEBUG=false # 关闭调试模式
EOF
# 启动容器
docker-compose up -d
|
此配置的作用:
- 监控范围:默认监控宿主机上所有正在运行的 Docker 容器
- 工作频率:每天北京时间凌晨 2:00:00 执行检查
- 工作内容:
- 检查每个容器对应的镜像是否有新版本
- 发现更新时自动拉取新镜像并重启容器
- 清理旧镜像释放磁盘空间
方案二:更新指定容器 🎯
此方案仅监控并更新您明确指定的容器,其他容器将被忽略。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 创建部署目录和 docker-compose.yml 文件
mkdir -p /mnt/mydisk/home/watchtower && cd $_ && \
cat > docker-compose.yml <<'EOF'
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
network_mode: bridge
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: >
-s "0 0 2 * * *"
--cleanup
speedtest halo metube md openlist sun-panel sun-panel-helper xiaomusic 1panel
EOF
# 启动容器
docker-compose up -d
|
此配置的作用:
- 监控范围:仅监控指定的9个容器:
speedtest, halo, metube, md, openlist, sun-panel, sun-panel-helper, xiaomusic, 1panel
- 工作频率:每天北京时间凌晨 2:00:00 执行检查
- 工作内容:
- 检查指定容器的镜像是否有新版本
- 发现更新时自动拉取新镜像并重启容器
- 清理旧镜像释放磁盘空间
选择建议:
- 如果您希望自动化更新所有容器,请选择方案一
- 如果您只想更新特定容器,避免其他容器意外更新,请选择方案二
🚀 二、使用 Watchtower
1. 查看运行状态 📊
Watchtower 主要通过日志输出提供信息,可通过以下命令查看运行状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 查看日志
docker logs watchtower
# 实时跟踪日志
docker logs -f watchtower
# 手动执行一次更新检查 (更新所有容器)
docker exec watchtower /watchtower --run-once
# 手动更新指定的容器
cd /vol1/1000/compose/watchtower && \
docker compose run --rm watchtower --run-once
# 清空日志文件
sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' watchtower)
|
2. 容器筛选策略 🔍
除了在命令行指定容器外,Watchtower 还支持通过标签筛选容器:
1
2
3
4
5
6
7
|
# 在其他容器的配置中添加以下标签可排除该容器不被Watchtower更新
labels:
- "com.centurylinklabs.watchtower.enable=false"
# 或者明确指定需要更新的容器
labels:
- "com.centurylinklabs.watchtower.enable=true"
|
🔧 三、容器维护命令
1. Docker Compose 命令 🐳
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 进入项目目录
cd /mnt/mydisk/home/watchtower
# 停止并删除容器
docker-compose down
# 拉取最新镜像并重启容器
docker-compose pull && docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
# 完整升级流程
docker-compose down && \
docker-compose pull && \
docker-compose up -d && \
docker image prune -f
|
2. Docker 容器命令 📦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 查看运行中容器
docker ps
# 停止/启动/重启容器(请替换 <container_name> 为实际容器名)
docker stop <container_name> # 停止容器
docker start <container_name> # 启动容器
docker restart <container_name> # 重启容器
# 进入容器Shell
docker exec -it <container_name> sh
# 查看容器详情
docker inspect <container_name>
# 查看容器资源使用情况
docker stats <container_name>
|
3. Docker 镜像管理 📀
1
2
3
4
|
docker images # 列出所有镜像
docker rmi <image_name:tag> # 删除指定镜像
docker image prune -f # 清理悬空镜像
docker image prune -a -f # 清理所有未使用镜像
|
🌟 启航自动化,维护无限
通过本文档,你已经成功使用 Docker 部署了 Watchtower 容器自动更新工具。现在,你可以:
🔄 自动更新 无需手动干预,自动检测并更新容器至最新版本
⏰ 定时维护 根据预设计划智能执行更新任务,确保服务持续稳定
🎯 精确控制 可选择更新所有容器或仅更新指定容器,灵活满足不同需求
🛡️ 安全可靠 更新过程保持原有配置不变,保障业务连续性
维护之路,是一场与技术进步同行的自动化旅程。愿 Watchtower 成为你可靠的运维助手,陪伴你在每一次容器更新和维护的关键时刻。
从现在开始,自动化运维,省心省力——构建你高效稳定的容器环境吧!🚀
📌 持续迭代:建议关注
Watchtower 官方更新
,及时获取新功能与优化。
🐛 反馈与互助:使用中如有疑问或建议,可前往
GitHub Issues
提出。
祝你运维愉快,更新无忧!🎉