7.4 KiB
Docker Compose 镜像源配置教程
在 Docker Compose 环境中配置轩辕镜像源,让容器编排享受优化访问体验
目录
背景说明
Docker 默认使用官方镜像仓库,在国内大陆访问时速度较慢,容易出现连接超时、拉取失败等问题。
轩辕镜像支持 9 个主流镜像仓库:
- Docker Hub (docker.io)
- GitHub Container Registry (ghcr.io)
- Google Container Registry (gcr.io)
- Quay.io (quay.io)
- NVIDIA Container Registry (nvcr.io)
- Kubernetes Registry (registry.k8s.io)
- Microsoft Container Registry (mcr.microsoft.io)
- Elastic Registry (docker.elastic.co)
- Oracle Container Registry (container-registry.oracle.com)
- GitLab Container Registry (registry.gitlab.com)
轩辕镜像提供高速稳定的镜像服务,支持 Docker 和 Compose 环境,无需额外插件,全面兼容 Docker 镜像拉取逻辑。
💡 **适用场景:**希望通过 docker-compose 管理容器,并全局启用轩辕镜像功能的用户
Compose 转换工具
如果你刚接触 Docker Compose,建议先从工具页完成配置再回到教程落地。下面两个入口分别覆盖「可视化生成」和「YAML 一键转换」场景,适合不同阶段的用户使用。
Compose 综合工具页(默认入口)
该页面默认进入可视化模式,可通过表单配置镜像、端口、卷、环境变量、重启策略、GPU 和资源限制等参数,实时生成 docker-compose.yml。
页面内置常用模板,并支持与 Docker Run 工具双向衔接(Compose 可转 Run,Run 也可带参数回填),更适合从零搭建或边配边看的新手。
YAML 一键转换模式
该入口直接打开 tab=yaml 模式:粘贴现有 Compose 文件后可一键转换为轩辕版本,自动处理镜像地址,并保留 services、volumes、networks、depends_on 等原有结构。
你还可以按需勾选 NPM/PIP/Golang/Yarn/HuggingFace 加速配置,转换后支持在线复制和下载 YAML,适合已有项目做批量改造或迁移。
获取专属域名
登录网站后,点击左侧菜单栏的「专属域名」菜单即可获取您的专属域名:
格式示例:https://***.xuanyuan.run
其中 *** 为您专属域名,请替换下文命令中的 *** 部分。
配置 Docker Daemon
推荐方案:一键安装配置脚本
该脚本支持多种 Linux 发行版,支持一键安装 docker、docker-compose 并且一键配置轩辕镜像源。
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
# 备用地址1
bash <(wget -qO- https://get.xuanyuan.dev/docker.sh)
# 备用地址2
bash <(wget -qO- https://get.xuanyuan.me/docker.sh)
或者手动编辑(或创建)Docker 的配置文件 /etc/docker/daemon.json:
echo '{
"insecure-registries": ["***.xuanyuan.run"],
"registry-mirrors": ["https://***.xuanyuan.run"]
}' | sudo tee /etc/docker/daemon.json > /dev/null
⚠️ 请将 *** 替换为您的专属域名。登录网站后,点击左侧菜单栏的「专属域名」菜单即可获取。
重启 Docker 服务
重新加载 systemd daemon 配置:
sudo systemctl daemon-reload
重启 Docker 服务:
sudo systemctl restart docker
可选:查看 Docker 配置是否加载成功
docker info | grep -A 10 "Registry Mirrors"
输出中应包含您的专属地址,例如:
Registry Mirrors:
https://***.xuanyuan.run/
使用 Compose 拉取
一旦系统级 Docker 配置完成,Docker Compose 将自动使用轩辕镜像镜像拉取,无须单独配置 Compose 文件。
示例 docker-compose.yml:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
运行命令:
docker compose up -d
镜像将自动通过 https://***.xuanyuan.run 拉取,无需额外设置。
验证镜像拉取
执行以下命令查看实际使用的拉取源:
docker pull mysql:8.0
再查看系统日志:
journalctl -u docker.service -n 50
如果看到如 connecting to https://***.xuanyuan.run/v2/ 的字样,说明配置已生效。
常见问题解答
Q: 为什么配置了 registry-mirrors,还是走 docker.io?
很多用户反馈,已经在 Docker 中配置了镜像源(registry-mirrors),但拉取镜像时仍然访问官方源(docker.io)。
拉取报错如下:
Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client. Timeout exceeded while awaiting headers)
这是因为 Docker 的镜像拉取机制是优先尝试使用镜像源,而不是强制始终使用。部分镜像的 tag 或 namespace 特殊(如 docker-library),可能仍绕过镜像源。
常见原因
专属域名没有可用流量
如果你使用专属域名,但该地址没有充值流量,当 Docker 客户端请求镜像源时,服务端会返回 402 Payment Required 错误,Docker 就会直接回退到官方仓库 docker.io 拉取镜像。
解决方案: 请前往充值页面充值相应的流量包,确保您的专属域名有足够的流量支持镜像服务。
如何确认专属域名可用
建议先用下列方式测试:
docker pull ***.xuanyuan.run/mysql
如果能正常拉取,说明专属域名可用且有流量。
解决方法
强烈建议手动修改 docker-compose.yml 中的镜像地址为专属域名,如:
version: "3.8"
services:
web:
image: ***.xuanyuan.run/library/nginx:latest
ports:
- "8080:80"
db:
image: ***.xuanyuan.run/library/mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
Dockerfile 示例
Dockerfile 里是这样写的:
FROM centos
VOLUME ["volume01" "volume02"]
CMD echo '----end----'
CMD /bin/bash
这里 FROM centos 表示基础镜像是从 Docker Hub 官方仓库拉取的 centos 镜像。
如果你要指定用 轩辕镜像仓库地址,只要在 FROM 里写完整的专属域名镜像地址即可,例如:
假设你的镜像仓库地址是 ***.xuanyuan.run/centos:7
那么 Dockerfile 改成:
FROM ***.xuanyuan.run/centos:7
VOLUME ["volume01" "volume02"]
CMD echo '----end----'
CMD ["/bin/bash"]
这样 docker build 时就不会去官方 Docker Hub 拉,而是从你指定的 轩辕镜像源 拉。
附加建议
若在 CI/CD 环境中(如 GitLab CI、GitHub Actions)使用 Docker Compose,可通过替换 Compose 文件中的镜像前缀(如 docker.io/nginx → ***.xuanyuan.run/nginx)来实现更强制性的访问优化。
技术支持
如遇配置问题,请提交工单寻求技术支持。