
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
do-snapshot.py 是一个简单的 Python 脚本,用于对 DigitalOcean Droplets 进行快照、传输到指定区域,并维护灵活的保留策略。
以下是使用示例:
bashpython3 do-snapshot.py --token ~/.dotoken -s 1d -r lon1 -k 3d:1d -k 1w:1w -k 1m:2m -k 0d:6m
或使用 Docker 镜像:
bashdocker run -e DO_TOKEN=$(cat ~/.dotoken) jtackaberry/do-snapshot -s 1d -r lon1 -k 3d:1d -k 1w:1w -k 1m:2m -k 0d:6m
上述命令将:
autosnapshot(默认标记)的 Droplet 进行一次快照lon1 区域(如果尚未存在)由于 DigitalOcean API 限制:
-s 1d,可每 4 小时运行一次,同时注意事项 1)。工具自身限制:
首先,获取 个人访问令牌。
可通过命令行直接传递令牌,但这会导致令牌(相当于密码)出现在 ps 输出中。因此建议传递包含令牌的文件路径,或通过 DO_TOKEN 环境变量导出。
在类 Unix 系统中:
bashexport DO_TOKEN=<你的令牌>
在 Windows 系统中:
cmdset DO_TOKEN=<你的令牌>
可通过多个 -k 开关构建复杂的保留策略。策略按快照年龄从新到旧的顺序执行,这意味着较旧策略可处理的快照数量由较新策略决定。因此,通常需要随着年龄增加而增大时间间隔。
例如,考虑参数 -k 2w:1w -k 1w:1m,其要求:
由于策略 1 先执行,当快照超过 1 个月时,策略 2 只能看到每 2 周一个的快照,因此无法满足每周保留一个的要求。
可使用 --simulate 选项模拟保留策略的效果,该选项按指定间隔(如 4 小时)模拟工具执行,持续指定时长(如 3 个月)。
以下示例模拟上述问题策略:
$ python3 do-snapshot.py -s 1d -k 2w:1w -k 1w:1m --simulate 4h:3m [... 日志输出省略 ...] Time Name ----------------------- -------------------------------------------------- 2018-10-09T01:47:36Z simulated-autosnapshot-20181009T014736Z 2018-10-23T01:47:36Z simulated-autosnapshot-20181023T014736Z 2018-11-06T01:47:36Z simulated-autosnapshot-20181106T014736Z 2018-11-20T01:47:36Z simulated-autosnapshot-20181120T014736Z 2018-12-04T01:47:36Z simulated-autosnapshot-20181204T014736Z 2018-12-18T01:47:36Z simulated-autosnapshot-20181218T014736Z 2018-12-31T01:47:36Z simulated-autosnapshot-20181231T014736Z 2019-01-01T01:47:36Z simulated-autosnapshot-20190101T014736Z 2019-01-02T01:47:36Z simulated-autosnapshot-20190102T014736Z 2019-01-03T01:47:36Z simulated-autosnapshot-20190103T014736Z 2019-01-04T01:47:36Z simulated-autosnapshot-20190104T014736Z 2019-01-05T01:47:36Z simulated-autosnapshot-20190105T014736Z 2019-01-06T01:47:36Z simulated-autosnapshot-20190106T014736Z
上述示例中,工具每天创建一个快照(-s 1d),最年轻的策略在快照超过 1 周后生效,因此最近一周(1 月初)保留每日快照。12 月的快照每 2 周保留一个,而 11 月和 10 月的快照尽管策略要求每周保留一个,但实际只能每 2 周保留一个。
usage: do-snapshot.py [-h] [-t TAG] [-p PREFIX] [-r REGION] -s AGE [-k INTERVAL:AGE] [--dryrun] [--token TOKEN] [--simulate INTERVAL:DURATION] [--syslog] [-v] 可选参数: -h, --help 显示帮助信息并退出 -t TAG, --tag TAG 对带有指定标签的 Droplet 进行快照(默认:autosnapshot) -p PREFIX, --prefix PREFIX 快照名称前缀(默认:$droplet-autosnapshot-) -r REGION, --region REGION 将快照传输到额外的区域(支持多个 -r) -s AGE, --snapshot AGE 若上次快照超过指定时间则创建新快照(后缀 m=月, w=周, d=天, h=小时) -k INTERVAL:AGE, --keep INTERVAL:AGE 对超过指定时间的快照,每间隔指定时间保留一个,删除其他(支持多个 -k 构建保留策略) --dryrun 不实际执行快照、删除或传输操作 --token TOKEN API 令牌或包含令牌的文件路径(也可通过 DO_TOKEN 环境变量传递) --simulate INTERVAL:DURATION 通过按指定间隔运行工具持续指定时长来测试保留策略(隐含 --dryrun) --syslog 记录日志到 syslog 而非 stderr -v, --verbose 增加日志详细程度
do-snapshot.py 对所有带有指定标签(如 prod 或 autosnapshot)的 Droplet 生效,因此需先为目标 Droplet 应用合适的标签。
do-snapshot.py 经 Python 3 测试,兼容 Python 2。唯一依赖是 requests 库。在 Ubuntu 或 Debian 系统中,可通过以下命令安装:
bashsudo apt install python3-requests
在其他系统或平台,若已安装 pip,可执行:
bashpip install requests
以下示例清单展示如何通过 Kubernetes CronJob 调度快照:
yamlapiVersion: v1 kind: Namespace metadata: name: digitalocean --- apiVersion: v1 kind: Secret metadata: name: do-api-token namespace: digitalocean type: Opaque data: # Base64 编码的 Digital Ocean API 令牌: # set +o history # echo -n 'apitokengoeshere' | base64 -w0 # set -o history token: U29ycnksIG5vIEFQSSB0b2tlbiBzdHVwaWRseSBjb21taXR0ZWQgdG8gZ2l0IGZvdW5kIGhlcmUuIDopCg== --- apiVersion: batch/v1beta1 kind: CronJob metadata: name: snapshot-droplets namespace: digitalocean spec: schedule: "23 */2 * * *" concurrencyPolicy: Forbid successfulJobsHistoryLimit: 1 failedJobsHistoryLimit: 1 jobTemplate: spec: template: spec: # 若尚未配置限制 uid/gid 的 PodSecurityPolicy,应取消以下注释 # securityContext: # runAsUser: *** # runAsGroup: *** containers: - name: do-snapshot image: jtackaberry/do-snapshot:latest env: - name: DO_TOKEN valueFrom: secretKeyRef: name: do-api-token key: token args: - -s 1d - -r lon1 - -k 3d:1d - -k 2w:5d - -k 0d:3w - -v restartPolicy: Never
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。





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