使用ctr无法拉取已导入K3s集群的Docker镜像问题求助
问题:导入Docker镜像到K3s后无法拉取或运行
操作步骤
使用以下命令将本地Docker镜像导入K3s的containerd中:
ctr -n k8s.io -a /run/k3s/containerd/containerd.sock image import /home/rocky/myawx-v1.0.0.tar
(尝试过该命令的多种变体)
镜像已成功导入
执行命令确认镜像存在:
k3s ctr image ls | grep awx
输出显示目标镜像已在本地:
docker.io/library/myawx:v1.0.0 application/vnd.docker.distribution.manifest.v2+json sha256:7...9 617.3 MiB linux/amd64 io.cri-containerd.image=managed quay.io/ansible/awx-ee:latest application/vnd.docker.distribution.manifest.v2+json sha256:5...0 613.4 MiB linux/amd64 io.cri-containerd.image=managed quay.io/ansible/awx-ee@sha256:5...0 application/vnd.docker.distribution.manifest.v2+json sha256:5...0 613.4 MiB linux/amd64 io.cri-containerd.image=managed
遇到的错误
1. 拉取镜像失败
执行k3s ctr image pull docker.io/library/myawx:v1.0.0时返回权限错误:
docker.io/library/myawx:v1.0.0: resolving |--------------------------------------| elapsed: 0.5 s total: 0.0 B (0.0 B/s) INFO[0000] trying next host error="pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed" host=registry-1.docker.io ctr: failed to resolve reference "docker.io/library/myawx:v1.0.0": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
2. 运行镜像失败
执行k3s ctr run docker.io/library/myawx myawx-run时提示镜像不存在:
ctr: image "docker.io/library/myawx": not found
原因及解决方法
拉取报错无需处理
ctr image pull是向Docker Hub远程仓库发起拉取请求,而你已经通过本地导入拥有了该镜像,这个报错是因为远程仓库没有这个公开镜像(或者你无权限访问),属于正常现象,完全不需要执行拉取操作。
运行报错的修复
运行失败有两个核心原因:
- 镜像标签不完整:本地镜像的完整标识是
docker.io/library/myawx:v1.0.0,你只写了docker.io/library/myawx,缺少版本标签:v1.0.0,导致containerd无法匹配到对应的镜像。 - 未指定命名空间:导入镜像时使用了
-n k8s.io命名空间,而k3s ctr默认使用default命名空间,跨命名空间无法找到已导入的镜像。
正确的运行命令:
k3s ctr -n k8s.io run docker.io/library/myawx:v1.0.0 myawx-run
验证镜像所在命名空间
如果要确认镜像在k8s.io命名空间下存在,执行:
k3s ctr -n k8s.io image ls | grep awx
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

