containerd 配置insecure-registry
首先,containerd的配置文件和Docker不同,路径是/etc/containerd/config.toml。用户可能需要生成默认配置,如果文件不存在的话。这里需要注意,containerd的配置修改后需要重启服务,用户是否有权限执行这些操作?
接下来,配置insecure-registry需要在config.toml中的plugins."io.containerd.grpc.v1.cri".registry.mirrors和configs部分添加相应的设置。用户可能对TOML格式不太熟悉,所以需要给出具体的示例,避免格式错误。比如,对于192.168.1.100:8000这个地址,要确保作为registry的mirror和configs中的条目正确。
另外,用户可能混淆了Docker和containerd的配置方法,需要明确指出两者的区别,特别是containerd需要独立配置,而Docker有时候会依赖containerd的配置,但并非总是如此。这点需要特别说明,避免用户误操作。
还要考虑到用户是否使用ctr命令还是nerdctl,不同的客户端工具可能有不同的行为。比如,ctr默认可能不支持insecure-registry,而nerdctl可以通过--insecure-registry参数或者在配置文件中设置。需要给出两种客户端的示例,帮助用户测试配置是否生效。
另外,之前用户遇到的问题是关于HTTP和HTTPS的,所以在配置insecure-registry时,需要强调这适用于非HTTPS的registry,比如自签名的或者HTTP的仓库。生产环境建议使用可信证书,但测试环境可以临时使用insecure配置。
可能用户是在Kubernetes环境中使用containerd,所以需要提醒如果是K8s,可能需要调整kubelet的配置,或者重启相关服务。不过这可能超出当前问题的范围,但可以作为扩展提示。
还需要验证步骤,比如通过nerdctl pull命令测试拉取镜像,或者检查日志确认配置是否生效。用户可能需要这些步骤来确认他们的配置是否正确。
最后,常见问题排查部分应该包括检查配置文件的语法是否正确,服务是否重启,以及客户端的兼容性。用户可能遇到配置未生效的情况,这时候需要一步步引导他们检查。
总结一下,回答需要结构清晰,分步骤说明配置方法,涵盖不同客户端工具,注意事项以及验证和排查方法,确保用户能够顺利解决问题。以下是 containerd 配置 insecure registry 的完整指南:
核心原理
当容器运行时(如 containerd)访问非 HTTPS 或使用自签名证书的私有仓库时,需明确标记仓库为 insecure 以绕过 TLS 验证。
配置步骤
1. 生成默认配置文件(若不存在)
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null
2. 修改配置文件 /etc/containerd/config.toml
找到以下配置段并添加 insecure 仓库配置:
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.1.100:8000"]
endpoint = ["http://192.168.1.100:8000"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.1.100:8000".tls]
insecure_skip_verify = true
3. 重启 containerd 服务
sudo systemctl restart containerd
验证配置
使用 ctr
客户端测试
sudo ctr images pull --plain-http 192.168.1.100:8000/library/nginx:latest
使用 nerdctl
客户端测试
nerdctl --insecure-registry pull 192.168.1.100:8000/library/nginx:latest
关键注意事项
地址匹配规则:
- 配置中的
192.168.1.100:8000
必须与镜像地址中的 完整域名/IP+端口 完全一致 - 示例镜像地址格式:
192.168.1.100:8000/项目名/镜像名:标签
- 配置中的
生产环境建议:
- 优先为仓库配置有效 TLS 证书(替代 insecure 模式)
- 自签名证书需将 CA 证书添加到系统的信任链:
sudo cp harbor-ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
扩展配置场景
针对特定命名空间配置
[plugins."io.containerd.grpc.v1.cri".registry.configs."registry.example.com".auth]
username = "admin"
password = "Harbor12345"
全局 HTTP 协议强制
[plugins."io.containerd.grpc.v1.cri".registry.configs."*".tls]
insecure_skip_verify = true
常见问题排查
配置未生效:
- 检查配置文件路径:
/etc/containerd/config.toml
- 确认 containerd 服务已重启
- 查看日志:
journalctl -u containerd --since "5 minutes ago"
- 检查配置文件路径:
客户端兼容性:
ctr
需要显式使用--plain-http
参数nerdctl
通过--insecure-registry
或配置文件~/.nerdctl/nerdctl.toml
控制
Kubernetes 集成:
- 如果使用 kubelet,需同步修改 kubelet 的
--container-runtime-endpoint
参数 - 重启 kubelet 服务:
sudo systemctl restart kubelet
- 如果使用 kubelet,需同步修改 kubelet 的
通过以上配置,containerd 即可安全地访问私有仓库。建议仅在测试环境使用 insecure 模式,生产环境应始终启用 TLS 加密。
相关推荐


















