crictl connection refused 错误主因是 containerd 未运行、socket 路径配置错误、socket 文件缺失/权限不足、数据目录损坏或 grpc 地址被显式覆盖;需依次检查服务状态、crictl 配置、socket 存在性与权限、重置数据目录,并核对 containerd 实际 grpc 地址。

如果您执行 crictl 命令时收到 connection refused 错误,这通常表明 crictl 无法通过 Unix domain socket 与 containerd 建立本地 IPC 连接。该错误并不直接等价于 socket 路径“配错”,而更可能是 socket 文件不存在、对应服务未运行、权限不足或路径配置与实际运行时状态不一致所致。以下是针对性排查与修复步骤:
一、验证 containerd 服务实际运行状态
crictl 连接失败的首要原因是 containerd 进程根本未处于活跃状态,此时无论 socket 路径如何配置均无效。需确认服务生命周期是否正常。
1、运行 systemctl is-active containerd 检查服务当前状态。
2、若输出为 inactive 或 failed,立即执行 systemctl start containerd 启动服务。
3、启动后再次运行 systemctl status containerd,确认其处于 active (running) 状态且无 exit code 异常(如 status=2/INVALIDARGUMENT)。
二、核对 crictl 配置中 runtime-endpoint 路径
crictl 默认读取 /etc/crictl.yaml 中的 endpoint 配置;若该文件存在且指定了 runtime-endpoint,则以其中路径为准。路径错误将导致连接目标地址偏差。
1、执行 cat /etc/crictl.yaml 2>/dev/null | grep runtime-endpoint 查看当前配置值。
2、若输出为空或路径为 unix:///run/crio/crio.sock 等非 containerd 路径,需修正为 containerd 实际监听路径。
3、编辑该文件,将 runtime-endpoint 设为 unix:///run/containerd/containerd.sock(containerd 默认路径)或根据 containerd config dump 输出中的 grpc.address 字段确认真实路径。
三、检查 containerd.sock 文件是否存在及权限
socket 文件必须由 containerd 主进程创建并持有,且 crictl 所在用户(通常是 root 或有 sudo 权限用户)需具备对该文件的读写访问能力。缺失或权限受限均触发 connection refused。
1、运行 ls -l /run/containerd/containerd.sock 查看文件是否存在及其属主与权限。
AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。
2、若提示 No such file or directory,说明 containerd 未成功初始化 socket —— 此时需检查 containerd 日志:journalctl -u containerd -n 50 --no-pager。
3、若文件存在但属主为 root:root 且权限为 srw-rw----,请确保执行 crictl 的用户属于 root 组或使用 sudo crictl 运行。
四、重置 containerd 数据目录强制重建 socket
当 containerd 启动失败但无明显日志报错,或 /var/lib/containerd 下元数据损坏时,socket 可能无法被正确绑定。此方法适用于已确认服务启动成功但仍报 connection refused 的顽固场景。
1、停止 containerd:systemctl stop containerd。
2、清除运行时数据:rm -rf /var/lib/containerd(注意:此操作将删除所有镜像、容器及快照,仅用于调试环境)。
3、重启服务:systemctl start containerd,随后验证 ls /run/containerd/containerd.sock 是否重新生成。
五、交叉验证 containerd grpc 地址是否被显式覆盖
containerd 的实际监听地址可能被配置文件显式修改,导致与 crictl 预期路径不一致。例如,若 /etc/containerd/config.toml 中设置了 grpc.address = "/var/run/containerd.sock",则 crictl 必须同步更新 endpoint。
1、运行 containerd config dump | grep -A 2 'grpc\|address' 提取当前生效的 grpc 监听配置。
2、若返回地址非 /run/containerd/containerd.sock,则需将 crictl 配置中的 runtime-endpoint 修改为该地址。
3、若 config.toml 中未定义 grpc.address,则默认使用 /run/containerd/containerd.sock,无需更改。

















