You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rootless模式运行k3s时如何执行ctr/crictl命令手动导入导出镜像

问题原因

Rootless模式部署的K3s不会将containerd监听套接字放置在全局系统路径/run/k3s/containerd/containerd.sock下,该路径是rootful(root权限)部署K3s时的默认套接字位置。普通用户本身无权限访问该全局路径,且rootless模式下该套接字也不会在这个位置生成,因此直接执行ctr、crictl命令时会触发连接超时报错。

普通用户调用ctr/crictl的前置配置

执行以下配置后,不需要root权限即可正常操作containerd:

  • 确认rootless K3s的实际containerd套接字路径,默认位于当前用户的运行时目录下,可执行echo $XDG_RUNTIME_DIR查看用户运行时根路径,默认套接字路径为/run/user/$UID/k3s/containerd/containerd.sock
  • 临时配置环境变量,执行以下命令指定运行时端点:
export CONTAINER_RUNTIME_ENDPOINT=unix:///run/user/$UID/k3s/containerd/containerd.sock
export IMAGE_SERVICE_ENDPOINT=unix:///run/user/$UID/k3s/containerd/containerd.sock
  • 永久生效配置:将上述两行export命令写入当前用户的shell配置文件(bash对应~/.bashrc,zsh对应~/.zshrc),执行source 对应配置文件路径加载配置即可
  • 配置完成后执行ctr image ls或crictl images验证,可正常列出镜像则配置生效
镜像导出与导入操作

导出镜像

推荐优先使用crictl操作,导出的镜像包兼容K8s运行时标准:

  • 先执行crictl images查询需要导出的镜像ID或完整镜像名(含标签)
  • 执行导出命令:
# 命令格式:crictl image export -o 本地存储路径.tar 镜像ID/镜像名:标签
# 示例:导出nginx:1.25镜像到当前目录nginx.tar
crictl image export -o ./nginx.tar docker.io/library/nginx:1.25

如果使用ctr导出,需要指定K3s默认使用的k8s.io命名空间,否则找不到对应镜像:

# 命令格式:ctr -n k8s.io image export 本地存储路径.tar 镜像名:标签
ctr -n k8s.io image export ./nginx.tar docker.io/library/nginx:1.25

导入镜像

同样优先使用crictl导入,导入后K3s可直接识别使用,不需要额外操作:

crictl image import 本地镜像包路径.tar

使用ctr导入仍需指定k8s.io命名空间:

ctr -n k8s.io image import 本地镜像包路径.tar

注意:所有操作直接用启动rootless K3s的普通用户执行即可,不要加sudo。加sudo会切换到root用户的环境变量,反而无法定位到普通用户态的containerd套接字。

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:48:19