使用 Watchtower 自动更新容器

Overview

自动删除旧容器和镜像,使用被更新容器原来的参数创建新的容器.

自动检查更新

1
2
3
4
5
6
7
8
9
10
11
docker run -d --name watcht_memos --restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup memos

# 可加入其它参数或环境变量
# 指定时区
-e TZ=Asia/Shanghai

# 每 300 秒检查一次
-i 300

# 使用 Cron 格式, 下面表示每个月第一天 0 点时检查一次更新
-s "0 0 1 * *"

手动检查更新

1
2
3
4
5
6
7
8
9
10
# 添加容器运行参数, 表示只运行一次、运行完就删除该更新检查容器
--rm --run-once

# 下面手动检查 memos 容器并更新, --cleanup 表示若有更新自动清理旧得容器及其镜像
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--run-once \
memos

一些坑

有一些容器不适合使用 Watchtower 来更新, 比如我使用的 nextcloud:25.0.3-apache.

Watchtower 是检查的 latest 标签. 如果它直接更新, 那么这个所谓 latest 将变成版本 23.0, 而我使用的是 25.0.3 版本, 相当于还降级了.

我上次就不小心更新了. 还好做了 bind mount, 数据都在, 重新安装需要的版本就好.