containerd报错unable to load CRI i
2025-12-29 本文已影响0人
wwq2020
背景
containerd报错unable to load CRI image service plugin dependency: invalid cri image config: mirrors cannot be set when config_path is provided
containerd 2.x后,不是通过mirrors的方式来配置mirror,而是通过config_path的方式
解决
以docker.io为例
创建目录
mkdir -p /etc/containerd/certs.d/docker.io
在/etc/containerd/certs.d/docker.io目录下创建文件hosts.toml,内容如下
[host."https://docker.m.daocloud.io"]
源码
internal/cri/config/config_unix.go中
func DefaultImageConfig() ImageConfig {
return ImageConfig{
...
Registry: Registry{
ConfigPath: "/etc/containerd/certs.d:/etc/docker/certs.d",
},
...
}
}
plugins/cri/images/plugin.go中
func init() {
默认配置
config := criconfig.DefaultImageConfig()
...
验证配置
if warnings, err := criconfig.ValidateImageConfig(ic.Context, &config); err != nil {
...
}
internal/cri/config/config.go中
验证配置
func ValidateImageConfig(ctx context.Context, c *ImageConfig) ([]deprecation.Warning, error) {
...
由于ConfigPath默认就是非空,所以useConfigPath必定是true
useConfigPath := c.Registry.ConfigPath != ""
如果配置了Mirrors
if len(c.Registry.Mirrors) > 0 {
则爆粗
if useConfigPath {
return warnings, errors.New("`mirrors` cannot be set when `config_path` is provided")
}
...
}
...
}