记录时间:2026-03-10
运行环境:Debian(Docker,Duplicacy Web UI)
问题现象
Duplicacy Web UI 中所有 backup 任务状态显示 Invalid or expired license,check 任务正常。
问题根因
- 容器 hostname 不固定:默认以容器 ID 作为机器名,重建后变化,导致许可证绑定的机器标识变化;
- machine-id 不持久化:
/var/lib/dbus/machine-id在容器重建后重生,亦会触发失效; - 联网刷新失败:Duplicacy 个人版免费但需 每月联网向
duplicacy.com刷新许可,若当时网络异常也会临时报错。
临时恢复
docker restart duplicacy
重启通常可立即恢复,但并不解决根因。
永久修复步骤
1) 修复前检查
# 当前容器主机名(若像 6c7fee0bd295 这种即为容器ID)
docker exec duplicacy hostname
# 记录当前 machine-id(后续持久化)
docker exec duplicacy cat /var/lib/dbus/machine-id
# 查看挂载配置
docker inspect duplicacy --format='{{json .HostConfig.Binds}}'
2) 将 machine-id 写入持久化目录
mkdir -p /opt/duplicacy/config
echo "$(docker exec duplicacy cat /var/lib/dbus/machine-id)" \
> /opt/duplicacy/config/machine-id
cat /opt/duplicacy/config/machine-id
3) docker-compose.yml 固定 hostname + 挂载 machine-id
示例(路径按你的实际目录替换)。
services:
duplicacy:
image: saspus/duplicacy-web:latest
container_name: duplicacy
hostname: duplicacy-server # 关键:固定 hostname
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
ports:
- "3875:3875"
volumes:
- /opt/duplicacy/config/machine-id:/var/lib/dbus/machine-id # 关键:固定 machine-id
- /opt/duplicacy/config:/config
- /opt/duplicacy/storage:/storage
- /opt:/data/opt
- /root:/data/root
- /etc:/data/etc
restart: unless-stopped
两处关键:
hostname: duplicacy-server— 固定机器名,避免容器 ID 变化;/var/lib/dbus/machine-id— 从宿主持久化挂载,容器重建后保持一致。
4) 重新部署
cd ~/docker配置文件/duplicacy
# Docker Compose v2 命令
docker compose down && docker compose up -d
5) 验证
docker exec duplicacy hostname
# 期望:duplicacy-server
docker exec duplicacy cat /var/lib/dbus/machine-id
# 期望:与 /opt/duplicacy/config/machine-id 一致
然后打开 http://服务器IP:3875,Dashboard 应恢复正常。
若仍未恢复:检查外网连通
Duplicacy 免费许可每月需联到 duplicacy.com 刷新:
# 容器内直连测试
docker exec duplicacy curl -I --max-time 10 https://duplicacy.com
docker exec duplicacy nslookup duplicacy.com
# 如容器无 nc 可在宿主测
nc -zv duplicacy.com 443
预期: curl 返回 200/301;若为 000/超时,检查宿主防火墙、DNS 或网络策略。
常见问答 / 注意事项
- 是否必须付费? 个人非商业使用免费;只需保证每月能联到许可端点。
- PUID/PGID 用 0 是否安全? 为简化演示保留 0/0;生产建议映射非 root 账户,并校对卷目录权限。
- Compose 文件位置:示例为
~/docker配置文件/duplicacy/docker-compose.yml,按你实际项目路径调整。 - 时间同步:容器时间严重漂移也可能导致 TLS/验证异常;确保宿主 NTP 正常。
修复后预期
- ✅ All successfully checked
- ✅ Storages: 2(示例:本地 + OneDrive)
- ✅ Backups: 8 scheduled
- ✅ Schedules: 3 active
所有 backup 任务不再显示 Invalid or expired license。