标准的docker推送工作,但不能buildx(docker容器)-导出到图像时出错



我正在尝试构建x推送到本地注册表。我取得了docker login <registry>的成功。

我在macos上构建。它看起来和docker-container有关。

标准码头工人作品:

docker build -t <registry>/demo
docker push <registry>/demo

但是buildx不起作用:

docker buildx create --use --name my-builder --driver-opt network=host --buildkitd-flags '--allow-insecure-entitlement network.host' --use

或者这个:

docker buildx create --name my-builder --platform $platforms --driver docker-container --driver-opt network=host --use

我得到这个错误:

docker buildx build --builder my-builder --tag <registry>:5000/demo -f Dockerfile .
...
=> ERROR exporting to image                                                                                                                                                                                               0.3s
=> => exporting layers                                                                                                                                                                                                    0.2s
=> => exporting manifest sha256:b7bbe730a33ba61b903b4371ded8057dd1a129fd60ff261e3a3ce5ef3425924e                                                                                                                          0.0s
=> => exporting config sha256:c38954cc53caf2cc4dd08ea836c3f2ab8951f400ce6731401628c9ba78f4ce5f                                                                                                                            0.0s
=> => pushing layers                                                                                                                                                                                                      0.0s
------
> exporting to image:
------
ERROR: failed to solve: failed to do request: Head "https://<registry>:5000/v2/demo/blobs/sha256:659301074bba138f5e7a1896fbe03daa5d95ce5b4f804af5a2c9ea03e9411b8b": http: server gave HTTP response to HTTPS client

使用buildx进行推送有什么特别之处吗?

如果您正在使用本地注册表,例如:

$docker run-d-p 5001:5000--始终重新启动--名称注册表注册表:2

(在我的设置中,本地注册表端口是5001而不是5000,因为mac-osx(m1应用硅(在该端口上有一个进程(。

然后您可能需要创建自定义buildx(bash脚本(,例如:

#!/bin/sh
name=container-builder
docker buildx ls | grep -q $name && docker buildx rm $name
docker buildx create --driver-opt network=host --use --config config.toml --name $name

config.toml文件具有:

[registry."localhost:5001"]
http = true

此外,对于我在Docker引擎中的本地注册表(通过Dashboard(,添加到Docker守护进程配置中:

"experimental": true,
"features": {
"buildkit": true
},
"insecure-registries": [
"localhost:5001"
]

这应该可以修复本地注册表的http与https错误。

最新更新