Docker 23中配置insecure-registries后docker build失效求助
解决Docker 23.0.1 BuildX从不安全仓库拉取镜像失败的问题
Docker 23默认启用的BuildKit(BuildX依赖的构建引擎)和传统Docker Daemon的配置相互独立——你在/etc/docker/daemon.json里配置的insecure-registries仅对Daemon生效,BuildKit不会读取这个配置,所以构建时拉取FROM指令里的镜像仍会强制要求HTTPS,导致报错http: server gave HTTP response to HTTPS client。
以下是几个无需配置SSL证书、仅忽略SSL警告的解决办法:
方法1:临时构建时指定参数
适合临时测试,无需修改任何配置文件:
docker buildx build --allow insecure-entitlement security.insecure -t <你的镜像名称> .
执行这条命令时,BuildKit会临时允许不安全的仓库访问权限,直接拉取HTTP协议的镜像。
方法2:全局配置BuildKit支持不安全仓库
适合长期在开发环境使用,一次性配置后永久生效:
- 创建或编辑BuildKit的配置文件
/etc/buildkitd.toml,添加你的自定义仓库配置:
# 替换成你的不安全仓库地址,比如 registry.local:5000 [registry."<你的仓库地址>"] http = true insecure = true
- 重启BuildKit服务使配置生效:
systemctl restart buildkit
之后无论是docker build还是docker buildx build都能正常从不安全仓库拉取镜像了。
方法3:创建专用的BuildX Builder实例
如果不想修改全局配置,可以单独创建一个支持不安全仓库的Builder实例:
# 创建并切换到新的Builder,替换<你的仓库地址>为实际地址 docker buildx create --use --name insecure-builder --driver-opt env=BUILDKIT_REGISTRY_MIRRORS='{"<你的仓库地址>": {"http": true, "insecure": true}}' # 初始化Builder docker buildx inspect insecure-builder --bootstrap
后续使用这个Builder构建时就会自动允许不安全仓库访问,需要切换回默认Builder时执行docker buildx use default即可。
注意:以上方法仅适合开发环境使用,生产环境强烈建议为私有仓库配置合法的SSL证书。
内容的提问来源于stack exchange,提问作者Michal Špondr
相关产品推荐
相关产品推荐

