K3s Docker 镜像源配置教程
适用于 K3s 集群(master + worker 节点),解决国内环境下 Docker Hub、Rancher、Pause 等镜像拉取超时问题。
1常见问题现象
当 K3s 集群出现以下错误时,通常表示镜像拉取失败:
Failed to create pod sandbox
failed to pull image "rancher/mirrored-pause:3.6"
failed to resolve reference "docker.io/rancher/mirrored-pause:3.6"
dial tcp ***.***.***.***:443: i/o timeout
💡问题原因:K3s 节点直接访问 registry-1.docker.io(Docker Hub),由于国内网络环境限制导致连接超时。
⚠️关键说明:rancher/mirrored-pause 是 K3s 创建 Pod Sandbox 时的系统级基础镜像,一旦拉取失败,整个集群将无法创建 Pod。这是为什么该问题看似很小,实际影响非常严重。
⚠️重要提示:即使已配置镜像加速,如果集群中存在未生效的节点,仍会导致镜像拉取失败。
2核心要点
所有节点均需配置镜像加速
K3s 集群中的 master 节点和所有 worker 节点都必须单独配置镜像加速,仅配置 master 节点无法解决 worker 节点的镜像拉取问题。
3镜像系统说明
K3s 默认使用 containerd 作为容器运行时,其镜像配置方式与 Docker 不同。
K3s 不会读取 Docker 的配置文件 /etc/docker/daemon.json
配置文件路径:
/etc/rancher/k3s/registries.yaml
4配置文件示例
以下为推荐的 registries.yaml 配置示例:
💡配置说明:请将配置中的 你的专属域名 替换为您的实际专属域名前缀。例如,如果您的专属域名为 123abc.xuanyuan.run,则应将 你的专属域名 替换为 123abc。
配置要点:
docker.io 配置:必须使用主专属域名,不能使用带后缀的域名(如 -quay 后缀)或免费域名。
Kubernetes 镜像:k8s.gcr.io 已废弃,统一使用 registry.k8s.io。
Rancher 镜像:rancher/* 镜像实际 registry 仍然是 docker.io,containerd 不会将 rancher 视为独立 registry。是否配置该项不影响拉取结果,关键仍是 docker.io 的加速配置。该项为可选配置。
5配置步骤
需要在集群的每个节点(master 和 worker)上分别执行以下配置步骤。
💡注意:如果节点是通过 k3s-agent 加入集群的,只需要重启 k3s-agent 服务,不需要重启 master 节点的 k3s 服务。
重要提示:修改配置后必须重启 K3s 服务才能生效,containerd 不会自动加载配置变更。
步骤 1:创建配置文件
在每个节点上创建配置目录并编辑配置文件:
sudo mkdir -p /etc/rancher/k3s
sudo vi /etc/rancher/k3s/registries.yaml
将上述配置示例内容写入文件,并替换为您的专属域名。
步骤 2:重启 K3s 服务
Master 节点:
sudo systemctl restart k3s
Worker 节点:
sudo systemctl restart k3s-agent
6验证配置
配置完成后,可在任意节点执行以下命令验证镜像加速是否生效:
k3s crictl pull rancher/mirrored-pause:3.6
配置生效的表现:
- 镜像拉取速度正常,无明显延迟
- 不再访问 registry-1.docker.io
- 不再出现 i/o timeout 错误
- Pod Sandbox 创建失败问题得到解决
7常见问题
问题 1:仅配置了 master 节点
K3s 集群中所有节点都需要单独配置,仅配置 master 节点无法解决 worker 节点的镜像拉取问题。
问题 2:docker.io 使用了错误的专属域名
docker.io 必须使用主专属域名,不能使用带后缀的域名(如 -quay 后缀)。
docker.io:
endpoint:
- https://***-quay.xuanyuan.run # 错误示例问题 3:配置后未重启服务
containerd 不支持配置热加载,修改配置后必须重启 k3s 或 k3s-agent 服务才能生效。
轩辕镜像配置手册
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
Docker 配置
登录仓库拉取
通过 Docker 登录认证访问私有仓库
专属域名拉取
无需登录使用专属域名
K8s Containerd
Kubernetes 集群配置 Containerd
K3s
K3s 轻量级 Kubernetes 镜像加速
Dev Containers
VS Code Dev Containers 配置
Podman
Podman 容器引擎配置
Singularity/Apptainer
HPC 科学计算容器配置
其他仓库配置
ghcr、Quay、nvcr 等镜像仓库
Harbor 镜像源配置
Harbor Proxy Repository 对接专属域名
Portainer 镜像源配置
Portainer Registries 加速拉取
Nexus 镜像源配置
Nexus3 Docker Proxy 内网缓存
系统配置
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
镜像拉取常见问题
使用与功能问题
错误码与失败问题
docker pull 提示 manifest unknown 怎么办?
manifest unknown
docker pull 提示 no matching manifest 怎么办?
no matching manifest(架构)
镜像已拉取完成,却提示 invalid tar header 或 failed to register layer 怎么办?
invalid tar header(解压)
Docker pull 时 HTTPS / TLS 证书验证失败怎么办?
TLS 证书失败
Docker pull 时 DNS 解析超时或连不上仓库怎么办?
DNS 超时
Docker 拉取出现 410 Gone 怎么办?
410 Gone 排查
出现 402 或「流量用尽」提示怎么办?
402 与流量用尽
Docker 拉取提示 UNAUTHORIZED(401)怎么办?
401 认证失败
遇到 429 Too Many Requests(请求太频繁)怎么办?
429 限流
docker login 提示 Cannot autolaunch D-Bus,还算登录成功吗?
D-Bus 凭证提示
为什么会出现「单层超过 20GB」或 413,无法加速拉取?
413 与超大单层
账号 / 计费 / 权限
用户好评
来自真实用户的反馈,见证轩辕镜像的优质服务