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)

轩辕镜像提供高速稳定的镜像服务,支持 Docker 和 Compose 环境,无需额外插件,全面兼容 Docker 镜像拉取逻辑。

💡适用场景:希望通过 docker-compose 管理容器,并全局启用轩辕镜像功能的用户

1获取专属域名

登录轩辕镜像官网:https://xuanyuan.cloud
进入【个人中心】,获取您的专属域名专属域名:

格式示例:https://xxx.xuanyuan.run
其中 xxx 为您专属域名,请替换下文命令中的 xxx 部分。

2配置 Docker Daemon 镜像源

推荐方案:一键安装配置脚本

该脚本支持多种Linux发行版,支持一键安装 docker、docker-compose 并且一键配置轩辕镜像源。

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)

或者手动编辑(或创建)Docker 的配置文件 /etc/docker/daemon.json:

echo '{
  "insecure-registries": ["xxx.xuanyuan.run"],
  "registry-mirrors": ["https://xxx.xuanyuan.run"]
}' | sudo tee /etc/docker/daemon.json > /dev/null

⚠️其中 xxx 是您的专属域名,请您手动更换。 专属域名请登录网站后在个人中心获取。

3重新加载 Daemon 并重启 Docker 服务

重新加载 systemd daemon 配置:

sudo systemctl daemon-reload

重启 Docker 服务:

sudo systemctl restart docker

可选:查看 Docker 配置是否加载成功

docker info | grep -A 10 "Registry Mirrors"

输出中应包含您的专属地址,例如:

Registry Mirrors:
https://xxx.xuanyuan.run/

使用 Docker 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://xxx.xuanyuan.run 拉取,无需额外设置。

验证镜像拉取是否优化访问

执行以下命令查看实际使用的拉取源:

docker pull mysql:8.0

再查看系统日志:

journalctl -u docker.service -n 50

如果看到如 connecting to https://xxx.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 xxx.xuanyuan.run/mysql

如果能正常拉取,说明专属域名可用且有流量。

解决方法:

强烈建议手动修改 docker-compose.yml 中的镜像地址为专属域名,如:

version: "3.8"
services:
  web:
    image: xxx.xuanyuan.run/library/nginx:latest
    ports:
      - "8080:80"
  db:
    image: xxx.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 里写完整的专属域名镜像地址即可,例如:

假设你的镜像仓库地址是 xxx.xuanyuan.run/centos:7

那么 Dockerfile 改成:

FROM xxx.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 → xxx.xuanyuan.run/nginx)来实现更强制性的访问优化。

技术支持

如遇配置问题,请 提交工单 寻求技术支持。

用户好评

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

oldzhang的头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

免费获取在线技术支持请 提交工单,官方QQ群:13763429 。
轩辕镜像面向开发者与科研用户,提供开源镜像的搜索和访问支持。所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
商务:17300950906
©2024-2025 源码跳动