用 WUD 提醒 Docker 镜像更新
WUD 提醒 Docker 镜像变化。收到提醒后,先看发行说明、保存备份,再逐个更新并测试,不自动重建全部服务。
想知道 VPS 上的容器镜像是否更新,又不想让监控工具自动重建应用,可以先用 WUD 做提醒。下面的配置固定为 WUD 9.4.1,管理界面只监听本机,Docker API 经过只读代理,状态保存在独立数据卷。出现新标签后,仍要阅读发行说明、备份和测试,不必立即更新全部容器。
接入前先确定它能控制什么
这份示例按普通 Linux rootful Docker 的 /var/run/docker.sock 路径配置。Rootless Docker 的 socket 路径、宿主机安全策略和权限可能不同,先核对实际环境,不要用放开 socket 权限或给所有容器加 privileged 来解决连接错误。
在独立目录保存 compose.yaml。示例使用项目名 wud;服务器已有同名项目或 WUD 数据卷时,先保存现有配置并核对卷,不要覆盖配置或执行下文的新卷初始化。代理没有对宿主机发布端口,只连接内部 monitor 网络;WUD 另接 egress 网络访问镜像仓库。挂载 socket 的 :ro 只限制文件挂载,不会把 Docker API 自动变成只读。这里真正拒绝写操作的是代理的 POST=0 和关闭的 ALLOW_* 开关。
name: wud
services:
socket-proxy:
image: tecnativa/docker-socket-proxy@sha256:1f5038b54f06c3e18422902cf00ba21803d1c97805aae032e5e6673d532d3459
restart: unless-stopped
environment:
CONTAINERS: "1"
IMAGES: "1"
INFO: "1"
VERSION: "1"
EVENTS: "1"
PING: "1"
POST: "0"
BUILD: "0"
COMMIT: "0"
EXEC: "0"
AUTH: "0"
SECRETS: "0"
SYSTEM: "0"
SWARM: "0"
ALLOW_START: "0"
ALLOW_STOP: "0"
ALLOW_RESTARTS: "0"
ALLOW_PAUSE: "0"
ALLOW_UNPAUSE: "0"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- monitor
wud:
image: getwud/wud:9.4.1
user: "1000:1000"
restart: unless-stopped
environment:
WUD_AUTH_ADMIN_USER: ${WUD_ADMIN_USER:?填写管理用户名}
WUD_AUTH_ADMIN_PASSWORD: ${WUD_ADMIN_PASSWORD:?填写独立强密码}
WUD_STORE_PATH: /store
WUD_WATCHER_LOCAL_HOST: socket-proxy
WUD_WATCHER_LOCAL_PORT: "2375"
WUD_WATCHER_LOCAL_WATCHBYDEFAULT: "false"
ports:
- "127.0.0.1:3000:3000"
volumes:
- wud-data:/store
networks:
- monitor
- egress
volumes:
wud-data:
networks:
monitor:
internal: true
egress:
在同目录的 .env 中填写 WUD_ADMIN_USER 和 WUD_ADMIN_PASSWORD,把文件权限设为 0600,不要提交到公开仓库。示例让 WUD 以 UID/GID 1000:1000 运行,因此新建数据卷的 /store 必须先有对应的写权限。仅在确认这是新建的 WUD 数据卷后初始化:
chmod 600 .env
docker compose config --quiet
docker compose run --rm --no-deps --user 0:0 --entrypoint sh wud -c 'chown 1000:1000 /store && chmod 700 /store'
docker compose up -d
docker compose ps
这里挂的是 /store,同时显式设置 WUD_STORE_PATH=/store,避免挂了一个目录,数据库却写在另一个地方。9.4.1 的状态文件是这个目录中的 wud.sqlite。管理账号环境变量会在启动时确保该账号并更新其凭据,不能把它们当成只在第一次启动时生效的变量。
WATCHBYDEFAULT=false 表示不默认观察所有容器。在需要观察的服务上添加 wud.watch: "true" 标签,再按该服务自己的流程重建;添加标签也可能重建容器,先确认备份与停机条件。不要为了给监控加标签,一次重建全部应用。
界面入口是服务器本机的 http://127.0.0.1:3000,远程查看走既有 SSH 隧道或受控管理网络。不要把代理的 Docker API 端口直接开放到公网。只读 API 仍能读取容器信息,代理网络也只应接入可信的管理组件。此配置没有设置重建业务容器的自动更新触发器;仓库需要认证时,另为对应仓库配置必要范围的凭据,不交出个人全权限令牌。
仓库访问失败,不代表已经是最新版
核对实际容器、当前标签和仓库。先确认 WUD 能看到预期的容器,再看它是否成功查询仓库;容器卡片出现,不等于远端版本已经查询成功。网络错误、权限错误与“没有新版本”是不同结果,页面空白或仓库不可访问,不能解释成所有服务已经最新。
日期标签、主版本标签、完整版本和摘要有不同维护含义。一个更长的字符串不一定是更高版本;对照项目真实的命名和发行方式判断。
提醒后,到目标应用目录操作
先记录现状:
docker compose images
docker compose ps
这些命令在准备更新的应用目录执行。读新版本是否迁移数据库、改配置、要求中间版本,保存 Compose、环境文件、旧镜像标识与一致数据副本,再按该应用的流程拉取和重建。
一次更新一个服务,检查页面、登录、上传和后台任务。旧镜像还在,不代表它可以读取已经迁移过的新数据库;回退可能还需要升级前数据。
WUD 的备份不包括所有业务
保存 WUD 的 compose.yaml、.env、仓库凭据和 wud-data 数据卷。复制 SQLite 数据前先正常停止 WUD,保存整个状态目录,不只挑一个正在写入的数据库文件。恢复时沿用同一个数据卷和对应写权限,再检查原观察目标与管理账号是否仍可用。
重建 WUD 容器和删除 WUD 数据卷是两回事。保留数据卷时,状态不应只依赖容器可写层;重新创建容器后应检查之前保存的目标仍在。Docker 的项目名会影响默认卷名,移动目录或改项目名时先核对实际挂载的卷,避免误用一个空卷。
WUD 显示很多容器,不表示打包它的目录就能恢复整台服务器。每个应用仍要保存自己的数据库和附件。维护记录留下实际完成的版本、备份位置和检查结果,下一次提醒出现时,再判断它是新的变化,还是上次尚未处理的任务。
测试更新时,需要多留多少空间
已有机器可保留旧镜像并完成恢复验证时,先用现有资源。需要独立环境测试升级时,按Docker VPS 的选择算好测试实例需要的配置和使用时间;监控发现新版本只是提醒,不能代替兼容性检查或数据库迁移评估。
WUD 本身可以和低负载应用共机,购买预算更应留给更新时的新旧镜像、数据库副本与恢复空间。需要复制测试环境,可查看 Evoxt 的实例与克隆功能,确认当前权限和费用;面板管理多个应用可比较 雨云 RCS 的 Docker 配置。先试一次升级、回退和数据恢复,再决定是否增加独立测试机。




