
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://img.shields.io/github/release/shizunge/gantry.svg?label=Release](https://github.com/shizunge/gantry/releases/latest) https://img.shields.io/badge/License-GPLv3-blue](https://github.com/shizunge/gantry/blob/main/LICENSE) https://img.shields.io/docker/image-size/shizunge/gantry/latest.svg?label=Image%20Size](https://hub.docker.com/r/shizunge/gantry) https://img.shields.io/docker/pulls/shizunge/gantry.svg?label=Docker%20Pulls&logo=Docker](https://hub.docker.com/r/shizunge/gantry) https://img.shields.io/github/actions/workflow/status/shizunge/gantry/on-push.yml?label=Build&branch=main&logo=GitHub](https://github.com/shizunge/gantry/actions/workflows/on-push.yml) https://img.shields.io/codecov/c/github/shizunge/gantry.svg?token=47MWUJOH4Q&label=Coverage&logo=Codecov](https://codecov.io/gh/shizunge/gantry) https://img.shields.io/codefactor/grade/github/shizunge/gantry?label=CodeFactor&logo=CodeFactor](https://www.codefactor.io/repository/github/shizunge/gantry)
https://github.com/shizunge/gantry 自动更新Docker Swarm中选定的服务至具有相同标签的较新镜像。它的设计受Shepherd启发,但功能更强大。
Gantry以容器https://hub.docker.com/r/shizunge/gantry%E5%BD%A2%E5%BC%8F%E5%8F%91%E5%B8%83%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%88%9B%E5%BB%BADocker%E6%9C%8D%E5%8A%A1%E5%B9%B6%E5%9C%A8Swarm%E7%AE%A1%E7%90%86%E8%8A%82%E7%82%B9%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%AE%83%E3%80%82
bashdocker service create \ --name gantry \ --mode replicated-job \ --constraint "node.role==manager" \ --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ shizunge/gantry
examples文件夹包含示例docker-compose文件以及更多启动Gantry的方法,例如定时运行和通过Webhook触发。
您也可以直接在容器外的主机上作为脚本运行Gantry:
bash./src/entrypoint.sh
Gantry兼容busybox ash(v1.35+)和bash。
您可以通过环境变量配置Gantry的大多数行为。
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| GANTRY_LOG_LEVEL | INFO | 控制Gantry生成的日志数量。有效值为NONE、ERROR、WARN、INFO、DEBUG。 |
| GANTRY_NODE_NAME | 向日志添加节点名称。若未设置,Gantry将使用Docker Swarm管理节点的主机名(从当前节点的Docker守护进程套接字或DOCKER_HOST读取)。 | |
| GANTRY_POST_RUN_CMD | 每次更新迭代后要eval执行的命令。例如,您可以使用此命令删除未使用的容器、网络和镜像,或更新独立Docker容器(参见示例)。 | |
| GANTRY_PRE_RUN_CMD | 每次更新迭代前要eval执行的命令。例如,您可以使用此命令删除未使用的容器、网络和镜像,或更新独立Docker容器(参见示例)。若预运行命令执行失败,Gantry将跳过服务更新。 | |
| GANTRY_SLEEP_SECONDS | 0 | 两次更新之间的间隔(秒)。设为0表示运行一次后退出。当设为非零值时,更新完成后Gantry将休眠至下次计划更新时间(实际休眠时间为该值减去更新耗时)。 |
| TZ | 设置日志中的时区。 |
Gantry基于Docker命令行,Docker命令行的https://docs.docker.com/engine/reference/commandline/cli/#environment-variables%E5%90%8C%E6%A0%B7%E9%80%82%E7%94%A8%E4%BA%8EGantry%E3%80%82
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| DOCKER_CONFIG | https://docs.docker.com/engine/reference/commandline/cli/#configuration-files%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%8C%E7%94%A8%E4%BA%8E%E5%AD%98%E5%82%A8%E8%AE%A4%E8%AF%81%E4%BF%A1%E6%81%AF%E3%80%82%E9%80%82%E7%94%A8%E4%BA%8E%E6%89%80%E6%9C%89Docker%E5%91%BD%E4%BB%A4%EF%BC%88%E5%8D%B3%E6%89%80%E6%9C%89%E6%9C%8D%E5%8A%A1%EF%BC%89%E3%80%82%E5%8F%82%E8%A7%81%E8%AE%A4%E8%AF%81%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%A0%87%E7%AD%BE%E4%B8%BA%E7%89%B9%E5%AE%9A%E6%9C%8D%E5%8A%A1%E8%AE%BE%E7%BD%AE%E4%B8%8D%E5%90%8C%E5%80%BC%E3%80%82 | |
| GANTRY_REGISTRY_CONFIG | 参见认证。 | |
| GANTRY_REGISTRY_CONFIG_FILE | 参见认证。 | |
| GANTRY_REGISTRY_CONFIGS_FILE | 参见认证。 | |
| GANTRY_REGISTRY_HOST | 参见认证。 | |
| GANTRY_REGISTRY_HOST_FILE | 参见认证。 | |
| GANTRY_REGISTRY_PASSWORD | 参见认证。 | |
| GANTRY_REGISTRY_PASSWORD_FILE | 参见认证。 | |
| GANTRY_REGISTRY_USER | 参见认证。 | |
| GANTRY_REGISTRY_USER_FILE | 参见认证。 |
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| GANTRY_SERVICES_EXCLUDED | 空格分隔的服务名称列表,这些服务将被排除在更新之外。 | |
| GANTRY_SERVICES_EXCLUDED_FILTERS | label=gantry.services.excluded=true | 空格分隔的https://docs.docker.com/engine/reference/commandline/service_ls/#filter%E5%88%97%E8%A1%A8%EF%BC%8C%E4%BE%8B%E5%A6%82%60label=project=project-a%60%E3%80%82%E6%8E%92%E9%99%A4%E5%8C%B9%E9%85%8D%E7%BB%99%E5%AE%9A%E8%BF%87%E6%BB%A4%E5%99%A8%E7%9A%84%E6%9C%8D%E5%8A%A1%E3%80%82%E9%BB%98%E8%AE%A4%E5%80%BC%E5%85%81%E8%AE%B8%E6%82%A8%E9%80%9A%E8%BF%87%E4%B8%BA%E6%9C%8D%E5%8A%A1%E6%B7%BB%E5%8A%A0%E6%A0%87%E7%AD%BE%60gantry.services.excluded=true%60%E6%9D%A5%E6%8E%92%E9%99%A4%E5%AE%83%E4%BB%AC%E3%80%82%E6%B3%A8%E6%84%8F%EF%BC%9A%E5%A4%9A%E4%B8%AA%E8%BF%87%E6%BB%A4%E5%99%A8%E4%B8%BA%E9%80%BB%E8%BE%91%E2%80%9C%E4%B8%8E%E2%80%9D%E5%85%B3%E7%B3%BB%E3%80%82%E7%A9%BA%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%A1%A8%E7%A4%BA%E6%97%A0%E8%BF%87%E6%BB%A4%E5%99%A8%EF%BC%8CGantry%E5%B0%86%E6%9B%B4%E6%96%B0%E6%89%80%E6%9C%89%E6%9C%8D%E5%8A%A1%E3%80%82 |
| GANTRY_SERVICES_FILTERS | 空格分隔的https://docs.docker.com/engine/reference/commandline/service_ls/#filter%E5%88%97%E8%A1%A8%EF%BC%8C%E7%94%A8%E4%BA%8E%60docker service ls --filter选择要更新的服务,例如label=project=project-a`。注意:多个过滤器为逻辑“与”关系。空字符串表示无过滤器,Gantry将更新所有服务。另请参见如何按名称过滤多个服务。 |
注意:Gantry读取服务上的标签,而非容器上的标签。若使用docker-compose文件设置服务,标签需添加到https://docs.docker.com/reference/compose-file/deploy/#labels%E9%83%A8%E5%88%86%E3%80%82
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| GANTRY_MANIFEST_CMD | buildx | 有效值为buildx、manifest和none。设置用于检查镜像清单的命令:
none将跳过清单检查,此时docker service update将始终执行。另请参见FAQ如何选择GANTRY_MANIFEST_CMD。您可以通过标签为特定服务设置不同值。 |
| GANTRY_MANIFEST_NUM_WORKERS | 1 | 可并行运行的GANTRY_MANIFEST_CMD最大数量。 |
| GANTRY_MANIFEST_OPTIONS | 附加到docker buildx imagetools inspect或docker manifest inspect命令的https://docs.docker.com/engine/reference/commandline/buildx_imagetools_inspect/#options%EF%BC%88%E5%8F%96%E5%86%B3%E4%BA%8E%60GANTRY_MANIFEST_CMD%60%E7%9A%84%E5%80%BC%EF%BC%89%EF%BC%8C%E9%80%82%E7%94%A8%E4%BA%8E%E6%89%80%E6%9C%89%E6%9C%8D%E5%8A%A1%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%A0%87%E7%AD%BE%E4%B8%BA%E7%89%B9%E5%AE%9A%E6%9C%8D%E5%8A%A1%E8%AE%BE%E7%BD%AE%E4%B8%8D%E5%90%8C%E5%80%BC%E3%80%82 |
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| GANTRY_ROLLBACK_ON_FAILURE | true | 设为true时,更新失败将自动回滚;设为false则禁用回滚。您可以通过标签为特定服务设置不同值。 |
| GANTRY_ROLLBACK_OPTIONS | 附加到docker service update --rollback命令的https://docs.docker.com/engine/reference/commandline/service_update/#options%EF%BC%8C%E9%80%82%E7%94%A8%E4%BA%8E%E6%89%80%E6%9C%89%E6%9C%8D%E5%8A%A1%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%A0%87%E7%AD%BE%E4%B8%BA%E7%89%B9%E5%AE%9A%E6%9C%8D%E5%8A%A1%E8%AE%BE%E7%BD%AE%E4%B8%8D%E5%90%8C%E5%80%BC%E3%80%82 | |
| GANTRY_UPDATE_JOBS | false | 设为true时更新replicated-job或global-job类型的服务;设为false则禁用。当服务无运行任务时,Gantry会向docker service update添加额外选项。您可以通过标签为特定服务设置不同值。 |
| GANTRY_UPDATE_NUM_WORKERS | 1 | 可并行执行的更新操作最大数量。 |
| GANTRY_UPDATE_OPTIONS | 附加到docker service update命令的https://docs.docker.com/engine/reference/commandline/service_update/#options%EF%BC%8C%E9%80%82%E7%94%A8%E4%BA%8E%E6%89%80%E6%9C%89%E6%9C%8D%E5%8A%A1%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%A0%87%E7%AD%BE%E4%B8%BA%E7%89%B9%E5%AE%9A%E6%9C%8D%E5%8A%A1%E8%AE%BE%E7%BD%AE%E4%B8%8D%E5%90%8C%E5%80%BC%E3%80%82 | |
| GANTRY_UPDATE_TIMEOUT_SECONDS | 0 | 单个服务更新超时时间(秒)。设为0禁用超时。您可以通过标签为特定服务设置不同值。 |
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| GANTRY_CLEANUP_IMAGES | true | 设为true时清理所有主机上已更新的旧镜像;设为false则禁用清理。清理前,Gantry将尝试删除使用这些镜像的所有已退出(exited)和已终止(dead)容器。 |
| GANTRY_CLEANUP_IMAGES_OPTIONS | 附加到docker service create命令的https://docs.docker.com/engine/reference/commandline/service_create/#options%EF%BC%8C%E7%94%A8%E4%BA%8E%E5%88%9B%E5%BB%BA%E6%B8%85%E7%90%86%E9%95%9C%E5%83%8F%E7%9A%84%E5%85%A8%E5%B1%80%E4%BB%BB%E5%8A%A1%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E6%AD%A4%E9%80%89%E9%A1%B9%E4%B8%BA%E6%9C%8D%E5%8A%A1%E6%88%96%E5%AE%B9%E5%99%A8%E6%B7%BB%E5%8A%A0%E6%A0%87%E7%AD%BE%E3%80%82 | |
| GANTRY_NOTIFICATION_APPRISE_URL | 通过https://github.com/caronc/apprise-api%E5%90%AF%E7%94%A8%E6%9C%8D%E5%8A%A1%E6%9B%B4%E6%96%B0%E9%80%9A%E7%9F%A5%E3%80%82%E6%AD%A4%E5%80%BC%E5%BF%85%E9%A1%BB%E6%8C%87%E5%90%91%E9%80%9A%E7%9F%A5%E7%AB%AF%E7%82%B9%EF%BC%88%E4%BE%8B%E5%A6%82%60http://apprise:8000/notify%60%EF%BC%89%E3%80%82 | |
| GANTRY_NOTIFICATION_CONDITION | all | 有效值为all和on-change。指定发送通知的条件:all表示每次运行都发送通知;on-change仅在有更新或错误时发送通知。 |
| GANTRY_NOTIFICATION_TITLE | 向通知标题添加附加消息。 |
您可以为服务添加标签以修改Gantry对特定服务的行为。当Gantry检测到服务上有以下标签时,将仅为该服务修改Docker命令行。标签的值会覆盖全局环境变量。
注意:Gantry读取服务上的标签,而非容器上的标签。若使用docker-compose文件设置服务,标签需添加到https://docs.docker.com/reference/compose-file/deploy/#labels%E9%83%A8%E5%88%86%E3%80%82
| 标签 | 描述 |
|---|---|
gantry.auth.config=<configuration> | 覆盖https://docs.docker.com/engine/reference/commandline/cli/#environment-variables%E3%80%82%E5%8F%82%E8%A7%81%E8%AE%A4%E8%AF%81%E3%80%82 |
gantry.services.excluded=true | 若使用默认GANTRY_SERVICES_EXCLUDED_FILTERS,此标签会将服务排除在更新之外。 |
gantry.manifest.cmd=<command> | 覆盖GANTRY_MANIFEST_CMD。 |
gantry.manifest.options=<string> | 覆盖GANTRY_MANIFEST_OPTIONS。 |
gantry.rollback.on_failure=<boolean> | 覆盖GANTRY_ROLLBACK_ON_FAILURE。 |
gantry.rollback.options=<string> | 覆盖GANTRY_ROLLBACK_OPTIONS。 |
gantry.update.jobs=<boolean> | 覆盖GANTRY_UPDATE_JOBS。 |
gantry.update.options=<string> | 覆盖GANTRY_UPDATE_OPTIONS。 |
gantry.update.timeout_seconds=<number> | 覆盖GANTRY_UPDATE_TIMEOUT_SECONDS。 |
认证
常见问题
从Shepherd迁移
Gantry设计兼容busybox ash(v1.35+),因此可在基于Alpine的容器中运行,无需安装额外包。唯一例外是通知功能需要curl。Gantry也已在bash中测试通过。
代码提交时会运行https://github.com/koalaman/shellcheck%E4%BB%A5%E7%A1%AE%E4%BF%9DShell%E8%84%9A%E6%9C%AC%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E3%80%82%E7%94%B1%E4%BA%8E%60busybox ash支持比POSIX sh`更多的特性,部分检查已禁用。禁用的检查列表见.shellcheckrc。
本地运行shellcheck:
bashshellcheck src/*.sh tests/*.sh
tests文件夹包含端到端测试,覆盖大多数配置选项。
如有任何问题或疑问,请通过https://github.com/shizunge/gantry/issues%E8%81%94%E7%B3%BB%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务