Docker build尝试HTTPS访问已配置的insecure registry连接被拒绝
问题原因
Docker for Windows 3.0+版本默认启用BuildKit作为构建后端,BuildKit组件独立于Docker daemon运行,默认不会读取daemon配置的insecure-registries规则,因此会强制对所有镜像仓库发起HTTPS请求,和你本地私有仓库的HTTP运行配置冲突。
你遇到的docker pull正常、docker build报错的现象,是因为pull走Docker daemon的原生逻辑,会遵循insecure-registries配置自动降级到HTTP协议,而BuildKit走独立逻辑没有读取该配置导致。
解决方案
方案1:单次构建临时禁用BuildKit
单次构建时传入环境变量关闭BuildKit即可,适配不同环境的命令如下:
- PowerShell环境执行:
$env:DOCKER_BUILDKIT=0; docker build .
- WSL/ Linux 子系统环境执行:
DOCKER_BUILDKIT=0 docker build .
方案2:全局关闭BuildKit(长期生效)
如果不需要使用BuildKit的特性,可以直接在Docker配置中全局关闭该功能:
- 打开Docker Desktop设置面板,进入
Docker Engine配置页 - 在原有JSON配置中增加
features字段,完整配置参考如下:
{ "insecure-registries": [ "harbor.local" ], "features": { "buildkit": false } }
- 点击
Apply & Restart重启Docker服务后,所有构建操作都会走原生Docker逻辑,自动适配insecure-registries配置。
方案3:单独配置BuildKit私有仓库规则(保留BuildKit功能)
如果需要保留BuildKit的构建加速等特性,可以单独为BuildKit配置私有仓库规则:
- Windows环境下打开
C:\Users\<你的系统用户名>\.docker目录,新建buildkitd.toml文件(如果是Linux/WSL环境则新建/etc/buildkitd.toml) - 写入以下配置内容:
[registry."harbor.local"] http = true insecure = true
- 重启Docker服务后重新执行构建即可。
内容的提问来源于stack exchange,提问作者madafaka
相关产品推荐
相关产品推荐

