ctr操作containerd镜像需显式指定完整镜像路径(如docker.io/library/nginx:alpine),拉取后须用ctr images check验证STATUS为complete;支持多平台拉取、打标签、离线导入导出(注意-n k8s.io命名空间)、分步创建启动容器及安全清理。

你需要在无Docker CLI的生产环境中直接操作containerd底层镜像与容器,比如Kubernetes节点调试、离线环境部署或安全审计场景。
拉取并验证镜像
ctr要求镜像地址必须显式包含注册表主机名,省略docker.io会导致拉取失败:【docker.io/library/nginx:alpine是有效格式,nginx:alpine会报错】
执行拉取命令:sudo ctr images pull docker.io/library/nginx:alpine
拉取完成后立即检查完整性,避免后续运行时因镜像损坏失败:sudo ctr images check docker.io/library/nginx:alpine。输出中STATUS列为complete (7/7)才表示所有层已就绪。
若需多平台镜像(如同时支持amd64和arm64),加--all-platforms参数;但注意这会显著增加下载体积和时间。
给镜像打标签与重命名
方法一:为已有镜像添加别名,便于记忆或适配不同部署脚本
sudo ctr images tag docker.io/library/nginx:alpine my-registry.local/nginx:prod
方法二:批量重写镜像引用路径,适用于私有仓库迁移
sudo ctr images tag docker.io/library/busybox:1.35 registry.example.com/base/busybox:stable
注意:tag操作不复制镜像内容,仅新增元数据引用,执行极快。
导入导出离线镜像包
第一步:从其他环境导出镜像为tar包(例如在有网络的机器上)
sudo ctr -n k8s.io images export nginx-offline.tar.gz docker.io/library/nginx:alpine
第二步:将tar包拷贝到目标离线节点
第三步:导入镜像并指定命名空间(关键!k8s节点必须用-n k8s.io,否则crictl不可见)
sudo ctr -n k8s.io images import nginx-offline.tar.gz
导入后立刻用crictl images验证是否出现在列表中——这是确认导入成功的唯一可靠方式。
创建并启动容器
ctr不提供一键运行容器的语法糖,必须分两步:先创建,再启动任务
创建容器(指定镜像、容器名、挂载点等):sudo ctr container create --net-host docker.io/library/nginx:alpine nginx-server
启动对应容器的任务:sudo ctr task start nginx-server
此时容器已运行,但无交互终端;如需bash调试,创建时加-t参数并指定入口点:sudo ctr container create -t docker.io/library/ubuntu:22.04 ubuntu-debug /bin/bash
启动后用sudo ctr task ps nginx-server查看进程,用sudo ctr logs nginx-server读取stdout/stderr。
清理不再需要的镜像
删除前务必确认该镜像未被任何容器引用,否则可能触发不可预知行为
sudo ctr images rm docker.io/library/nginx:alpine
若提示“image is being used by a container”,先用sudo ctr containers ls查出关联容器,停止并删除后再试。











