一、Containerd 简介
Containerd 是一个行业标准的容器运行时,由 CNCF 托管(毕业项目)。它负责管理容器的完整生命周期:镜像拉取/存储、容器的创建/运行/销毁、网络和存储管理等。
提示: Containerd 自 1.24 版本起成为 Kubernetes 默认的容器运行时(取代 Docker)。
二、环境要求
| 项目 |
要求 |
| 操作系统 |
Linux (推荐 Ubuntu 20.04+ / CentOS 7.9+ / Rocky 8+) |
| 内核版本 |
>= 4.x(推荐 5.x+) |
| runc |
>= 1.1.0 |
| CNI 插件 |
需单独安装 |
2.1 前置依赖安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF
sudo modprobe overlay sudo modprobe br_netfilter
lsmod | grep -e overlay -e br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
sudo sysctl --system
sysctl net.bridge.bridge-nf-call-iptables net.ipv4.ip_forward
|
三、安装 Containerd
3.1 二进制包安装(通用方式)
适用场景: 所有 Linux 发行版,离线安装,需要特定版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| CONTAINERD_VERSION="2.2.6" wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz
RUNC_VERSION="1.3.6" wget https://github.com/opencontainers/runc/releases/download/v${RUNC_VERSION}/runc.amd64 sudo install -m 755 runc.amd64 /usr/local/sbin/runc
CNI_VERSION="1.6.2" wget https://github.com/containernetworking/plugins/releases/download/v${CNI_VERSION}/cni-plugins-linux-amd64-v${CNI_VERSION}.tgz sudo mkdir -p /opt/cni/bin sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v${CNI_VERSION}.tgz
sudo mkdir -p /usr/local/lib/systemd/system sudo tee /usr/local/lib/systemd/system/containerd.service <<'EOF' [Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target
[Service] ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/local/bin/containerd
Type=notify Delegate=yes KillMode=process Restart=always RestartSec=5
LimitNPROC=infinity LimitCORE=infinity LimitNOFILE=infinity
TasksMax=infinity OOMScoreAdjust=-999
[Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reload sudo systemctl enable --now containerd
|
3.2 使用 apt 安装(Debian/Ubuntu)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| sudo apt-get update sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt list -a containerd.io
sudo apt install -y containerd.io=1.7.27-1
sudo systemctl enable --now containerd
|
3.3 使用 yum/dnf 安装(CentOS/RHEL/Rocky)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y containerd.io
sudo systemctl enable --now containerd
|
四、生成默认配置
Containerd 安装后默认不生成配置文件,需要手动生成:
1 2 3 4 5 6 7 8
| sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo cat /etc/containerd/config.toml
|
五、配置详解
配置文件位置: /etc/containerd/config.toml
5.1 镜像加速(Registry Mirrors)
注册表镜像用于加速从容器镜像仓库拉取镜像的速度。
两种配置方式(互斥):
- 方式A(推荐):
config.toml 中设置 config_path,然后在 /etc/containerd/certs.d/ 下通过 hosts.toml 配置
- 方式B:
config.toml 中内联 registry.mirrors 配置
一旦设置了 config_path,内联的 registry.mirrors 和 registry.configs 将被忽略。
以下采用方式A(推荐),以 Docker Hub 为例,其他仓库同理:
1 2
| sudo vim /etc/containerd/config.toml
|
找到 [plugins."io.containerd.grpc.v1.cri".registry] 部分,修改如下:
如果是 containerd 2.x 插件路径改为 io.containerd.cri.v1.images
1 2 3 4 5
|
[plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d"
|
上面配置了 /etc/containerd/certs.d 路径,下面配置镜像加速
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << 'EOF' server = "https://registry-1.docker.io" [host."https://docker.1ms.run"] capabilities = ["pull", "resolve"] skip_fetch_failure = true timeout = "30s" [host."https://docker.m.daocloud.io"] capabilities = ["pull", "resolve"] skip_fetch_failure = true timeout = "30s" EOF
ctr image pull docker.io/library/nginx:alpine
ctr -n k8s.io images list ctr image pull --hosts-dir=/etc/containerd/certs.d docker.io/library/nginx:alpine
crictl pull docker.io/library/nginx:alpine
|
5.2 配置代理(HTTP/HTTPS Proxy)
当拉取镜像需要通过代理服务器访问外网时,有以下两种方式配置:
方式一:为 Containerd 配置代理(推荐)
修改 containerd 的 systemd 服务文件,添加环境变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| sudo mkdir -p /etc/systemd/system/containerd.service.d
sudo tee /etc/systemd/system/containerd.service.d/http-proxy.conf <<'EOF' [Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,.svc,.cluster.local"
Environment="http_proxy=http://127.0.0.1:7890" Environment="https_proxy=http://127.0.0.1:7890" Environment="no_proxy=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,.svc,.cluster.local" EOF
|
1 2 3 4 5 6 7 8 9 10 11 12
| sudo systemctl daemon-reload sudo systemctl restart containerd
sudo systemctl show containerd --property=Environment
rm -f /etc/systemd/system/containerd.service.d/http-proxy.conf systemctl daemon-reload systemctl restart containerd
|
注意: NO_PROXY 中应包含 Kubernetes 集群的 Service CIDR 和 Pod CIDR,以及 .svc、.cluster.local 等域名,避免集群内部通信经过代理。
方式二:全局环境变量设置
1 2 3 4 5 6
| sudo tee -a /etc/environment <<EOF HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,.svc,.cluster.local EOF
|
查看当前代理配置
1 2
| sudo cat /proc/$(pidof containerd)/environ | tr '\0' '\n' | grep -i proxy
|
5.3 配置私有镜像仓库
重要: 当你在 config.toml 中设置了 config_path = "/etc/containerd/certs.d" 后,所有 registry 的镜像加速、私有仓库配置都应放在 /etc/containerd/certs.d/<registry-host>/hosts.toml 中。原有的内联 registry.mirrors 和 registry.configs 会被忽略。
目录结构总览
1 2 3 4 5 6 7 8 9 10
| /etc/containerd/certs.d/ ├── docker.io/ │ └── hosts.toml # Docker Hub 镜像加速 ├── harbor.mycorp.com/ │ ├── hosts.toml # 私有 Harbor 仓库 │ ├── ca.crt # 自签名 CA 证书 │ ├── client.crt # 客户端证书(mTLS场景) │ └── client.key # 客户端密钥 └── my-registry.local:5000/ └── hosts.toml # HTTP 非安全仓库
|
场景1:HTTP 非安全私有仓库
适用于内网 Harbor 或自建 registry 且未配置 HTTPS。
1 2 3 4 5 6 7 8 9 10 11
| sudo mkdir -p /etc/containerd/certs.d/my-registry.local:5000
sudo tee /etc/containerd/certs.d/my-registry.local:5000/hosts.toml <<'EOF' server = "http://my-registry.local:5000"
[host."http://my-registry.local:5000"] capabilities = ["pull", "resolve", "push"] skip_verify = true EOF
|
说明:
server — 指明上游目标地址(HTTP 协议)
skip_verify = true — 跳过 TLS 验证(HTTP 仓库必须设为 true)
capabilities — pull(拉取)、resolve(解析)、push(推送)
场景2:HTTPS 私有仓库(自签名证书)
当私有仓库开启了 HTTPS 但使用自签名证书时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo mkdir -p /etc/containerd/certs.d/harbor.mycorp.com
sudo cp /path/to/ca.crt /etc/containerd/certs.d/harbor.mycorp.com/ca.crt
sudo tee /etc/containerd/certs.d/harbor.mycorp.com/hosts.toml <<'EOF' server = "https://harbor.mycorp.com"
[host."https://harbor.mycorp.com"] capabilities = ["pull", "resolve", "push"] ca = "/etc/containerd/certs.d/harbor.mycorp.com/ca.crt" EOF
|
也可以直接用 skip_verify 跳过证书校验(仅限测试环境):
1 2 3
| [host."https://harbor.mycorp.com"] capabilities = ["pull", "resolve", "push"] skip_verify = true
|
场景3:HTTPS 私有仓库 + 认证
需要登录凭据的私有仓库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo mkdir -p /etc/containerd/certs.d/harbor.mycorp.com
sudo tee /etc/containerd/certs.d/harbor.mycorp.com/hosts.toml <<'EOF' server = "https://harbor.mycorp.com"
[host."https://harbor.mycorp.com"] capabilities = ["pull", "resolve", "push"] ca = "/etc/containerd/certs.d/harbor.mycorp.com/ca.crt"
[host."https://harbor.mycorp.com".header] authorization = ["Basic YWRtaW46bXlwYXNzd29yZA=="] EOF
|
authorization 的值为 Base64(username:password),生成方式:
1
| echo -n "admin:mypassword" | base64
|
场景4:mTLS 双向认证
私有仓库要求客户端提供证书时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo cp /path/to/client.crt /etc/containerd/certs.d/harbor.mycorp.com/client.crt sudo cp /path/to/client.key /etc/containerd/certs.d/harbor.mycorp.com/client.key sudo cp /path/to/ca.crt /etc/containerd/certs.d/harbor.mycorp.com/ca.crt
sudo tee /etc/containerd/certs.d/harbor.mycorp.com/hosts.toml <<'EOF' server = "https://harbor.mycorp.com"
[host."https://harbor.mycorp.com"] capabilities = ["pull", "resolve", "push"] ca = "/etc/containerd/certs.d/harbor.mycorp.com/ca.crt" client = [["/etc/containerd/certs.d/harbor.mycorp.com/client.crt", "/etc/containerd/certs.d/harbor.mycorp.com/client.key"]] EOF
|
配置后验证
1 2 3 4 5 6 7 8 9 10 11
| sudo systemctl restart containerd
sudo ctr image pull harbor.mycorp.com/project/nginx:latest
sudo ctr image pull --hosts-dir=/etc/containerd/certs.d harbor.mycorp.com/project/nginx:latest
sudo crictl pull harbor.mycorp.com/project/nginx:latest
|
安全提示: hosts.toml 中的密码以 Base64 编码存储(非加密),生产环境建议使用密钥管理服务。
5.4 配置 Cgroup 驱动
对于 Kubernetes 集群,强烈推荐使用 systemd cgroup 驱动:
1 2 3 4 5
| [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true
|
5.5 配置 sandbox 镜像(pause 镜像)
1 2 3
| [plugins."io.containerd.grpc.v1.cri"] sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10"
|
5.6 修改默认镜像存储位置
Containerd 默认将所有数据(镜像层、容器快照、元数据等)存储在 /var/lib/containerd,生产环境中经常需要迁移到大容量磁盘或独立挂载点。
涉及的路径
| 路径 |
默认值 |
用途 |
root |
/var/lib/containerd |
containerd 全局数据根目录(快照、元数据、临时文件) |
state |
/run/containerd |
运行时临时状态(socket、pid 等,通常无需修改) |
方式一:修改顶层 root(一步到位,推荐)
直接修改 config.toml 顶层的 root 字段,所有数据统一迁移:
1 2 3 4 5 6 7 8 9 10 11
| sudo systemctl stop containerd
sudo mkdir -p /data/containerd
sudo rsync -avz /var/lib/containerd/ /data/containerd/
sudo vim /etc/containerd/config.toml
|
1 2 3 4 5
| root = "/var/lib/containerd"
root = "/data/containerd"
|
1 2 3 4 5 6 7
| sudo systemctl start containerd
sudo ls /data/containerd/ sudo ctr image ls sudo ctr image pull docker.io/library/alpine:latest
|
方式二:仅修改 CRI 插件的镜像存储(细粒度控制)
如果只想改镜像存储位置而保持其他数据不变:
1 2 3
| [plugins."io.containerd.grpc.v1.cri"]
|
注意: containerd_image_store_path 仅 containerd 2.x 支持。1.x 版本通过顶层 root 统一控制。
方式三:软链接(无侵入、零停机时间最短)
不想改配置时,直接做软链接映射:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo systemctl stop containerd
sudo mkdir -p /data/containerd sudo rsync -avz /var/lib/containerd/ /data/containerd/
sudo mv /var/lib/containerd /var/lib/containerd.bak sudo ln -s /data/containerd /var/lib/containerd
sudo systemctl start containerd sudo ctr image ls
|
迁移后验证
1 2 3 4 5 6 7 8 9
| sudo du -sh /data/containerd/ sudo ls -la /data/containerd/io.containerd.content.v1.content/
sudo ctr image pull docker.io/library/redis:alpine
sudo find /data/containerd -name "*.tar" | head
|
清理旧路径
1 2
| sudo rm -rf /var/lib/containerd.bak
|
5.7 完整配置示例
以下是一个适用于 Kubernetes 集群的生产级 config.toml 模板(在默认配置基础上覆盖关键参数,其余保持默认即可):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| version = 2
[plugins."io.containerd.grpc.v1.cri"] sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10"
[plugins."io.containerd.grpc.v1.cri".containerd]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d"
|
配套的 certs.d 目录结构(镜像加速 + 私有仓库统一管理):
1 2 3 4 5 6 7 8 9 10 11 12
| /etc/containerd/certs.d/ ├── docker.io/ │ └── hosts.toml # Docker Hub 镜像加速 ├── registry.k8s.io/ │ └── hosts.toml # K8s 镜像仓库加速 ├── gcr.io/ │ └── hosts.toml # GCR 镜像加速 ├── quay.io/ │ └── hosts.toml # Quay 镜像加速 └── harbor.mycorp.com/ ├── hosts.toml # 私有 Harbor 仓库 └── ca.crt # 自签名证书
|
典型 docker.io/hosts.toml 示例:
1 2 3 4 5 6 7 8 9
| server = "https://registry-1.docker.io"
[host."https://docker.m.daocloud.io"] capabilities = ["pull", "resolve"] skip_fetch_failure = true
[host."https://docker.1ms.run"] capabilities = ["pull", "resolve"] skip_fetch_failure = true
|
典型 harbor.mycorp.com/hosts.toml 示例:
1 2 3 4 5 6 7 8
| server = "https://harbor.mycorp.com"
[host."https://harbor.mycorp.com"] capabilities = ["pull", "resolve", "push"] ca = "/etc/containerd/certs.d/harbor.mycorp.com/ca.crt"
[host."https://harbor.mycorp.com".header] authorization = ["Basic <base64-credentials>"]
|
六、启动与管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| sudo systemctl start containerd
sudo systemctl stop containerd
sudo systemctl restart containerd
sudo systemctl status containerd
sudo systemctl enable containerd
sudo systemctl disable containerd
sudo journalctl -u containerd -f sudo journalctl -u containerd -n 100 sudo journalctl -u containerd --since "10 minutes ago"
containerd --version sudo ctr version
|
七、常用运维命令
7.1 ctr 命令
ctr 是 containerd 自带的 CLI 工具,功能全面但操作较为底层。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
sudo ctr image pull docker.io/library/nginx:alpine
sudo ctr image ls sudo ctr image ls -q
sudo ctr image export nginx-alpine.tar docker.io/library/nginx:alpine
sudo ctr image import nginx-alpine.tar
sudo ctr image rm docker.io/library/nginx:alpine
sudo ctr image tag docker.io/library/nginx:alpine docker.io/library/nginx:my-tag
sudo ctr run -d docker.io/library/nginx:alpine my-nginx
sudo ctr container ls
sudo ctr container ls -a
sudo ctr container info my-nginx
sudo ctr task kill my-nginx
sudo ctr container rm my-nginx
sudo ctr task ls
sudo ctr task exec -t --exec-id exec1 my-nginx /bin/sh
sudo ctr task metrics my-nginx
sudo ctr namespace ls
sudo ctr -n k8s.io image ls sudo ctr -n k8s.io container ls
|
7.2 crictl 命令
crictl 是 Kubernetes 社区维护的 CRI 调试工具,使用方式与 docker 命令行非常接近。
1 2 3 4 5 6 7 8 9 10 11 12
| VERSION="v1.32.0" wget https://github.com/kubernetes-sigs/cri-tools/releases/download/${VERSION}/crictl-${VERSION}-linux-amd64.tar.gz sudo tar Cxzvf /usr/local/bin crictl-${VERSION}-linux-amd64.tar.gz
sudo tee /etc/crictl.yaml <<EOF runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| sudo crictl pull nginx:alpine sudo crictl images sudo crictl rmi <IMAGE_ID> sudo crictl inspecti <IMAGE_ID>
sudo crictl pods sudo crictl pods --all sudo crictl inspectp <POD_ID> sudo crictl runp pod-config.json sudo crictl stopp <POD_ID> sudo crictl rmp <POD_ID>
sudo crictl ps sudo crictl ps -a sudo crictl inspect <CONTAINER_ID> sudo crictl logs <CONTAINER_ID> sudo crictl logs -f <CONTAINER_ID> sudo crictl exec -it <CONTAINER_ID> /bin/sh sudo crictl stats
sudo crictl info sudo crictl version
|
7.3 nerdctl 命令(推荐)
nerdctl 是 containerd 的类 Docker CLI 工具,对 Docker 用户非常友好。
安装方式见 第 8 节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| nerdctl pull nginx:alpine nerdctl images nerdctl rmi nginx:alpine nerdctl tag nginx:alpine nginx:my-tag
nerdctl run -d --name web -p 8080:80 nginx:alpine nerdctl ps nerdctl ps -a nerdctl stop web nerdctl start web nerdctl restart web nerdctl rm web nerdctl rm -f web nerdctl exec -it web /bin/sh nerdctl logs -f web nerdctl inspect web nerdctl top web
nerdctl compose up -d nerdctl compose down nerdctl compose ps nerdctl compose logs -f
nerdctl network ls nerdctl network create my-net nerdctl network inspect my-net nerdctl network rm my-net
nerdctl volume ls nerdctl volume create my-vol nerdctl volume inspect my-vol nerdctl volume rm my-vol
nerdctl system events nerdctl system info nerdctl system df nerdctl system prune -af
nerdctl -n k8s.io ps nerdctl -n k8s.io images
|
八、安装 nerdctl(类 Docker CLI)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
NERDCTL_VERSION="2.0.4" wget https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-full-${NERDCTL_VERSION}-linux-amd64.tar.gz
sudo tar Cxzvvf /usr/local nerdctl-full-${NERDCTL_VERSION}-linux-amd64.tar.gz
nerdctl version nerdctl info
wget https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-${NERDCTL_VERSION}-linux-amd64.tar.gz
tar -zxvf nerdctl-${NERDCTL_VERSION}-linux-amd64.tar.gz mv nerdctl /usr/local/bin/
nerdctl version nerdctl info
|
提示: nerdctl-full 包包含了 BuildKit(用于镜像构建)、CNI 插件等完整组件。如果只需要 CLI 工具,可仅下载 nerdctl 单文件。
九、卸载 Containerd
9.1 停止服务并清理数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo systemctl stop containerd sudo systemctl disable containerd
sudo ctr task ls -q | xargs -r sudo ctr task kill
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/containerd
|
9.2 按安装方式卸载
二进制安装:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo rm -f /usr/local/bin/containerd sudo rm -f /usr/local/bin/containerd-shim* sudo rm -f /usr/local/bin/ctr sudo rm -f /usr/local/bin/runc sudo rm -f /usr/local/sbin/runc
sudo rm -f /usr/local/lib/systemd/system/containerd.service sudo rm -f /etc/systemd/system/containerd.service.d/http-proxy.conf sudo systemctl daemon-reload
sudo rm -rf /opt/cni
|
apt 安装(Debian/Ubuntu):
1 2
| sudo apt-get purge -y containerd.io sudo apt-get autoremove -y
|
yum 安装(CentOS/RHEL):
1
| sudo yum remove -y containerd.io
|
9.3 完全清理(可选)
1 2 3 4 5 6 7 8 9 10 11
| sudo rm -rf /run/containerd
sudo rm -f /run/containerd/containerd.sock
sudo rm -f /usr/local/bin/nerdctl /usr/local/bin/buildkitd /usr/local/bin/buildctl
rm -rf ~/.local/share/containerd
|
十、常见问题与排错
Q1: 拉取镜像报错 x509: certificate signed by unknown authority
1 2 3 4 5 6
|
sudo cp ca.crt /usr/local/share/ca-certificates/my-ca.crt sudo update-ca-certificates
|
Q2: 拉取镜像报错 dial tcp: lookup xxxx: no such host
1 2 3 4 5 6
|
cat /etc/resolv.conf
sudo journalctl -u containerd | grep -i "dial"
|
Q3: grpc: timed out 或 context deadline exceeded
1 2 3 4
|
sudo ctr image pull --timeout 300s docker.io/library/nginx:alpine
|
Q4: cgroup 相关错误
1 2 3 4 5
|
sudo ctr info | grep -i cgroup
|
Q5: 容器无法访问网络
1 2 3 4 5 6 7 8 9 10 11
| ls /opt/cni/bin/
ls /etc/cni/net.d/
sudo sysctl net.ipv4.ip_forward
sudo sysctl -w net.ipv4.ip_forward=1
|
Q6: 查看 Containerd 配置是否生效
1 2 3 4 5 6
| sudo ctr info
sudo systemctl restart containerd sudo ctr info | grep -A 20 mirrors
|
Q7: 磁盘空间不足
1 2 3 4 5 6 7
| sudo du -sh /var/lib/containerd
sudo ctr image prune --all
nerdctl system prune -af
|
Q8: 配置更新后不生效
1 2 3 4 5 6 7 8 9
| sudo systemctl restart containerd
containerd config dump > /tmp/current-config.toml
diff <(containerd config default) <(containerd config dump)
|
十一、快速参考
关键文件路径
| 文件/目录 |
用途 |
/etc/containerd/config.toml |
主配置文件 |
/var/lib/containerd/ |
数据存储目录(镜像、容器层等) |
/run/containerd/containerd.sock |
gRPC 监听 socket |
/opt/cni/bin/ |
CNI 插件目录 |
/etc/cni/net.d/ |
CNI 网络配置目录 |
/etc/crictl.yaml |
crictl 配置文件 |
常用操作速查
| 操作 |
命令 |
| 启动服务 |
sudo systemctl start containerd |
| 重启服务 |
sudo systemctl restart containerd |
| 查看状态 |
sudo systemctl status containerd |
| 查看日志 |
sudo journalctl -u containerd -f |
| 查看版本 |
containerd --version |
| 生成配置 |
containerd config default |
| 拉取镜像 |
sudo ctr image pull <image> |
| 列出镜像 |
sudo ctr image ls |
| 运行容器 |
sudo ctr run -d <image> <name> |
| 清理资源 |
sudo ctr image prune --all |
镜像加速地址汇总
| 源仓库 |
镜像加速地址 |
| docker.io |
https://docker.m.daocloud.io |
| gcr.io |
https://gcr.m.daocloud.io |
| k8s.gcr.io / registry.k8s.io |
https://k8s.m.daocloud.io |
| quay.io |
https://quay.m.daocloud.io |
| ghcr.io |
https://ghcr.m.daocloud.io |
| docker.io(阿里云) |
https://<your-id>.mirror.aliyuncs.com |
| docker.io(中科大) |
https://docker.mirrors.ustc.edu.cn |
| docker.io(南京大学) |
https://docker.nju.edu.cn |