
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Blacklabelops是基于命令行工具Duplicity的Docker卷备份与恢复解决方案。通过容器化和参数化设计,简化了使用和配置流程。
重要提示:此工具并非可克隆和备份运行中数据库数据的向导工具。备份前应停止所有使用目标数据的容器,以避免意外的数据损坏。工具越简单,数据丢失风险也可能越高!请务必通过检查备份数据(如S3存储桶)验证工具是否正常工作,仔细核对配置,并启用镜像提供的检查选项(如以只读方式挂载卷)。
更多后端请参考:Duplicity支持的后端
在Hipchat上留言提问:blacklabelops/hipchat
Docker卷备份教程:
只需执行以下命令即可备份Docker应用卷:
bash$ docker run -it --rm \ --name volumerize \ -v yourvolume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize backup
将名为
yourvolume的卷挂载为源,并备份到backup_volume卷
容器默认以守护模式启动,执行每日增量备份。通过在容器启动时定义环境变量(docker run)可实现特定行为。
应用数据必须存储在Docker卷中。可使用docker volume ls命令列出卷,通过-v选项将卷挂载到备份容器,并添加:ro选项将源设置为只读。
示例:使用Jenkins
bash$ docker run \ -d -p 80:8080 \ --name jenkins \ -v jenkins_volume:/jenkins \ blacklabelops/jenkins
启动Jenkins并将数据存储在Docker卷
jenkins_volume中。
将Jenkins数据挂载到容器内文件夹,并配置blacklabelops/volumerize将/source文件夹备份到/backup文件夹:
bash$ docker run -d \ --name volumerize \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize
启动Volumerize。
jenkins_volume卷在容器内对应/source文件夹,backup_volume卷对应/backup文件夹。
可在容器内执行命令,如立即备份或恢复:
bash$ docker exec volumerize backup
触发备份操作。
容器仅支持备份一个源文件夹(通过环境变量VOLUMERIZE_TARGET指定)。若需备份多个卷,需将多个卷挂载到同一源文件夹下。
示例:
将这些卷挂载到同一source文件夹下启动容器:
bash$ docker run -d \ --name volumerize \ -v application_data:/source/application_data:ro \ -v application_database_data:/source/application_database_data:ro \ -v application_configuration:/source/application_configuration:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize
对公共父文件夹
/source执行Volumerize备份。
恢复操作简单:首先停止Volumerize容器,然后启动一个具有相同环境变量和卷但不使用只读模式的新容器!这是确保恢复目录结构与备份时一致的关键。
提示:恢复后,建议为备份容器重新添加只读选项!
示例:
原备份配置:
bash$ docker run -d \ --name volumerize \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize
停止备份容器并执行恢复:
bash$ docker stop volumerize $ docker run --rm \ -v jenkins_volume:/source \ -v backup_volume:/backup:ro \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize restore $ docker start volumerize
触发一次性恢复。执行恢复命令的容器在完成后会被删除。
可在恢复命令中添加--dry-run参数测试恢复功能:
bash$ docker run --rm \ -v jenkins_volume:/source \ -v backup_volume:/backup:ro \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize restore --dry-run
若需查看备份与源数据的差异,需使用verify命令:
bash$ docker run --rm \ -v jenkins_volume:/source \ -v backup_volume:/backup:ro \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize verify
容器默认的定时任务设置为0 0 4 * * *(UTC时间凌晨4点)。可通过环境变量VOLUMERIZE_JOBBER_TIME设置自定义调度。
可通过环境变量TZ设置时区。
定时语法不同于标准cron,使用Jobber工具:http://dshearer.github.io/jobber/doc/v1.1/#/time-strings
示例:
bash$ docker run -d \ --name volumerize \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "TZ=Europe/Berlin" \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ -e "VOLUMERIZE_JOBBER_TIME=0 0 3 * * *" \ blacklabelops/volumerize
按德国当地时间凌晨3点执行备份。
此镜像可在备份前后停止和启动Docker容器。通过环境变量VOLUMERIZE_CONTAINERS指定容器名称(空格分隔的列表)。
注意:需添加参数-v /var/run/docker.sock:/var/run/docker.sock以允许操作主机上的容器。
示例:
application(应用)application_database(应用数据库)bash$ docker run -d \ --name volumerize \ -v /var/run/docker.sock:/var/run/docker.sock \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ -e "VOLUMERIZE_CONTAINERS=application application_database" \ blacklabelops/volumerize
以下脚本将应用此启动流程:backup、backupFull、restore和periodBackup。
测试流程:
bash$ docker exec volumerize backup
警告:确保容器使用正确的重启策略。Docker、Docker-Compose、Docker-Swarm、Kubernetes和Cattle等工具可能在Volumerize停止容器后自动重启。对运行中的实例执行备份可能导致备份损坏甚至数据损坏。务必确保docker stop命令能真正停止实例,且底层部署技术不会自动重启容器。可通过执行docker stop后运行docker ps检查容器是否确实已停止。
blacklabelops/volumerize底层使用duplicity。参考duplicity命令行选项:Duplicity CLI选项
可通过环境变量VOLUMERIZE_DUPLICITY_OPTIONS传递duplicity选项,这些选项将应用于所有blacklabelops/volumerize命令和脚本。例如,--dry-run选项将使整个容器进入模拟模式,所有duplicity命令仅执行模拟操作。
示例:
bash$ docker run -d \ --name volumerize \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ -e "VOLUMERIZE_DUPLICITY_OPTIONS=--dry-run" \ blacklabelops/volumerize
仅在干运行模拟模式下操作。
可通过环境变量PASSPHRASE设置安全密码对备份进行加密。
生成安全密码:
bash$ docker run --rm blacklabelops/volumerize openssl rand 128 -base64
在控制台输出合适的密码。
示例:
bash$ docker run -d \ --name volumerize \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ -e "PASSPHRASE=Jzwv1V83LHwtsbulVS7mMyijStBAs7Qr/V2MjuYtKg4KQVadRM" \ blacklabelops/volumerize
功能与上述相同,但所有备份均会加密。
可使用安全密钥对备份进行加密。
需准备:
VOLUMERIZE_GPG_PRIVATE_KEY指定PASSPHRASE指定生成密钥:在计算机上安装gpg,执行:
bash$ gpg2 --full-gen-key Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: YourName Email address: yourname@youremail.com Comment: You selected this USER-ID: "YourName <yourname@youremail.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O $ gpg2 --export-secret-keys --armor yourname@youremail.com > MyKey.asc
注意:当前镜像仅支持无密码的密钥。导入流程存在问题,若密钥有密码会提示输入。
示例:
bash$ docker run -d \ --name volumerize \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -v $(pwd)/MyKey.asc:/key/MyKey.asc \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ -e "VOLUMERIZE_GPG_PRIVATE_KEY=/key/MyKey.asc" \ -e "PASSPHRASE=" \ blacklabelops/volumerize
导入无密码的密钥。
测试流程:
bash$ docker exec volumerize backup
默认行为:初始备份为全量备份,后续执行增量备份。可通过环境变量VOLUMERIZE_FULL_IF_OLDER_THAN定期强制全量备份。
格式:数字后接s(秒)、m(分)、h(时)、D(天)、W(周)、M(月)或Y(年)。
示例:
Volumerize示例:
bash$ docker run -d \ --name volumerize \ -v jenkins_volume:/source:ro \ -v backup_volume:/backup \ -v cache_volume:/volumerize-cache \ -e "TZ=Europe/Berlin" \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ -e "VOLUMERIZE_FULL_IF_OLDER_THAN=7D" \ blacklabelops/volumerize
每7天强制执行一次全量备份。
容器启动时会创建一些便捷脚本:
| 脚本 | 描述 |
|---|---|
| backup | 使用容器配置创建备份 |
| backupFull | 使用容器配置创建全量备份 |
| backupIncremental | 使用容器配置创建增量备份 |
| verify | 比较最新备份与本地文件 |
| restore | 注意!触发使用最新备份立即强制恢复 |
| periodicBackup | 定时任务触发的脚本 |
| startContainers | 启动指定的Docker容器 |
| stopContainers | 停止指定的Docker容器 |
| remove-older-than | 删除旧备份 |
| cleanCacheLocks | 清理旧缓存锁 |
示例:在运行中的容器内触发脚本
bash$ docker exec volumerize backup
在名为
volumerize的容器内执行backup脚本。
传递脚本参数:
blacklabelops/volumerize底层使用duplicity,参考duplicity命令行选项:Duplicity CLI选项
示例:
bash$ docker exec volumerize backup --dry-run
--dry-run将模拟备份过程,不实际
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






来自真实用户的反馈,见证轩辕镜像的优质服务