文章目录
- Docker和Containerd的调用链
- 修改Containerd的镜像仓库地址
-
- 常见错误排查
-
- [1. 配置后拉取镜像失败](#1. 配置后拉取镜像失败)
- [2. Containerd 重启失败](#2. Containerd 重启失败)
- [3. nerdctl 命令找不到](#3. nerdctl 命令找不到)
- Containerd管理命令:nerdctl
管理容器(创建、销毁等)都是由CRI进行的;常见的CRI有Containerd、kata等;
k8s1.24之前没有CRI协议,直接硬编码Docker的api,使用dockerd运行时;1.24开始有CRI协议,但需要自己安装运行时,经常使用Containerd运行时。
Docker和Containerd的调用链

RunC:容器底层执行工具,调用linux内核去创建容器。
修改Containerd的镜像仓库地址
改成成阿里云 ACR
目前使用的k8s版本是:v1.30
bash
# kubectl version
Client Version: v1.30.14
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.30.1
# Containerd配置文件:/etc/containerd/config.toml
# ACR公开仓库域名
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.cn-hangzhou.aliyuncs.com"]
endpoint = ["registry.cn-hangzhou.aliyuncs.com"]
# 重启Containerd:systemctl restart containerd
常见错误排查
1. 配置后拉取镜像失败
现象 :执行 ctr images pull 或 nerdctl pull 时提示 failed to resolve reference 或 connection refused。
原因:
- 配置文件中的
endpoint地址写错,或镜像仓库域名与配置的registry.mirrors不匹配; - 修改配置后没有重启 Containerd,导致新配置未生效;
- 服务器无法访问外网,或阿里云 ACR 域名被防火墙拦截。
解决方法:
bash
# 1. 检查配置是否生效
containerd config dump | grep -A 5 "registry.mirrors"
# 2. 确认配置无误后重启 Containerd
systemctl restart containerd
# 3. 测试拉取镜像
ctr images pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest
2. Containerd 重启失败
现象 :执行 systemctl restart containerd 后提示 Job for containerd.service failed。
原因:
config.toml语法错误,TOML 格式不合法;- 配置了不存在的插件路径或镜像仓库;
- 端口被占用,或 containerd.sock 文件权限异常。
解决方法:
bash
# 1. 查看详细错误日志
journalctl -u containerd -n 50 --no-pager
# 2. 校验配置文件语法
containerd config dump > /dev/null
# 3. 若语法错误,备份后恢复默认配置再逐步修改
cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
containerd config default > /etc/containerd/config.toml
systemctl restart containerd
3. nerdctl 命令找不到
现象 :执行 nerdctl version 提示 command not found。
原因:
- 解压后的二进制文件没有移动到
/usr/local/bin目录; - 文件没有可执行权限;
/usr/local/bin不在当前用户的 PATH 环境变量中。
解决方法:
bash
# 1. 确认文件已解压并移动到正确位置
tar -zxvf nerdctl-2.3.5-linux-amd64.tar.gz
mv nerdctl /usr/local/bin/
# 2. 赋予可执行权限
chmod +x /usr/local/bin/nerdctl
# 3. 验证命令是否可用
nerdctl version
Containerd管理命令:nerdctl
官方地址:https://github.com/containerd/nerdctl.git
下载链接:https://github.com/containerd/nerdctl/releases/download/v2.3.5/nerdctl-2.3.5-linux-amd64.tar.gz
下载后解压将命令移动到/usr/local/bin目录下即可
- 基础命令
bash
# 查看版本
nerdctl version
# 查看当前k8s运行的容器,一定要加上命名空间
nerdctl -n k8s.io ps
# nerdctl命令与docker命令完全一样,不过要指定命名空间