Containerd-Runc常用命令


一、containerd 常用工具说明

  • ctr
    containerd 官方 CLI,功能强但偏底层,不太适合生产脚本
  • crictl
    遵循 CRI 接口,Kubernetes 场景推荐
  • nerdctl
    Docker 风格 CLI(如果已安装)

二、ctr 常用命令

1️⃣ 镜像管理

1
2
3
4
5
6
7
8
9
10
11
# 查看镜像
ctr images ls

# 拉取镜像
ctr images pull docker.io/library/nginx:latest

# 删除镜像
ctr images rm docker.io/library/nginx:latest

# 查看镜像详情
ctr images info docker.io/library/nginx:latest

⚠️ containerd 默认 namespace 是 default

1
ctr -n k8s.io images ls

2️⃣ 容器与任务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 运行容器(前台)
ctr run --rm -t docker.io/library/busybox:latest test sh

# 创建容器
ctr container create docker.io/library/nginx:latest nginx-test

# 启动容器
ctr task start nginx-test

# 查看运行中的 task
ctr tasks ls

# 查看容器列表
ctr containers ls

# 停止任务
ctr task kill nginx-test

# 删除容器
ctr container rm nginx-test

3️⃣ 查看日志 / 进程

1
2
3
4
5
# 查看 task 详情
ctr task info nginx-test

# 查看容器进程
ctr task ps nginx-test

ctr 没有像 docker logs 一样的命令,日志需通过运行时或 kubelet 查看


4️⃣ Namespace 操作

1
2
3
4
5
6
7
8
# 查看 namespace
ctr namespaces ls

# 创建 namespace
ctr namespaces create test

# 在指定 namespace 操作
ctr -n test containers ls

三、crictl(Kubernetes 强烈推荐)

1️⃣ 基本信息

1
2
crictl info
crictl version

2️⃣ Pod & 容器

1
2
3
4
5
6
7
8
9
# 查看 Pod
crictl pods

# 查看容器
crictl ps
crictl ps -a

# 查看容器详情
crictl inspect <container_id>

3️⃣ 日志与执行命令(最常用)

1
2
3
4
5
# 查看容器日志
crictl logs <container_id>

# 进入容器
crictl exec -it <container_id> sh

4️⃣ 镜像

1
2
3
crictl images
crictl pull nginx:latest
crictl rmi nginx:latest

四、nerdctl(如果已安装)

几乎等同 Docker CLI

1
2
3
4
nerdctl ps
nerdctl images
nerdctl run -it nginx
nerdctl logs <container_id>

五、常见排错命令组合

1
2
3
4
5
6
7
8
9
10
11
# containerd 是否运行
systemctl status containerd

# kubelet 使用的 runtime
ps aux | grep containerd

# 查看 containerd socket
ls /run/containerd/containerd.sock

# crictl 指定 runtime
crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps

六、使用建议

场景 推荐工具
Kubernetes 排错 crictl
containerd 底层调试 ctr
类 Docker 体验 nerdctl

常用的containerd的命令怎么拉取推送镜像

一、用 ctr 拉取 / 推送镜像(原生方式)

⚠️ 注意:ctr 默认没有 Docker 登录信息,私有仓库要单独指定用户名密码

1️⃣ 拉取镜像(pull)

1
2
# 拉取 Docker Hub 镜像
ctr images pull docker.io/library/nginx:latest

指定平台(常见问题)

1
2
3
ctr images pull \
--platform linux/amd64 \
docker.io/library/nginx:latest

2️⃣ 给镜像打 tag

1
2
3
ctr images tag \
docker.io/library/nginx:latest \
harbor.example.com/test/nginx:v1

3️⃣ 推送镜像(push)

1
ctr images push harbor.example.com/test/nginx:v1

4️⃣ 私有仓库(用户名密码)

1
2
3
4
5
6
ctr images pull \
--user admin:password \
harbor.example.com/test/nginx:v1
ctr images push \
--user admin:password \
harbor.example.com/test/nginx:v1

5️⃣ Kubernetes 场景(重要 ⚠️)

K8s 使用的是 k8s.io namespace:

1
ctr -n k8s.io images ls

拉取镜像到 K8s namespace:

1
2
3
ctr -n k8s.io images pull \
--user admin:password \
harbor.example.com/test/nginx:v1

否则 kubelet 看不到镜像


二、用 nerdctl(强烈推荐 ⭐)

类似 Docker,用起来最舒服

1️⃣ 登录仓库

1
nerdctl login harbor.example.com

2️⃣ 拉取镜像

1
nerdctl pull nginx:latest

3️⃣ 打 tag

1
nerdctl tag nginx:latest harbor.example.com/test/nginx:v1

4️⃣ 推送镜像

1
nerdctl push harbor.example.com/test/nginx:v1

✔ 自动使用登录凭证
✔ 支持 build / compose / logs


三、crictl 能不能推送镜像?

👉 不能

1
2
3
crictl 只能 pull / rmi / images
不能 push
crictl pull nginx:latest

crictl 主要是给 kubelet / CRI 调试 用的


四、配置 containerd 私有仓库(免输密码)

1️⃣ 编辑配置文件

1
vim /etc/containerd/config.toml

2️⃣ 添加 registry 配置

1
2
3
4
5
6
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.example.com"]
endpoint = ["https://harbor.example.com"]

[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.example.com".auth]
username = "admin"
password = "password"

3️⃣ 重启

1
systemctl restart containerd

之后:

1
ctr images pull harbor.example.com/test/nginx:v1

Containerd-Runc常用命令
https://blog.t-ao.cn/2026/01/10/Containerd-Runc常用命令/
作者
TAO
发布于
2026年1月10日
许可协议