我正在尝试将 buildx 推送到本地注册表。我有docker login <registry>
成功。
我正在 macos 上构建。看起来和docker-container
有关系。 .
标准 Docker 工作原理:
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 --restart always --nameregistryregistry: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 引擎中的本地注册表(通过仪表板),添加到 docker 守护进程配置中:
"experimental": true,
"features": {
"buildkit": true
},
"insecure-registries": [
"localhost:5001"
]
这应该可以修复本地注册表的 http 与 https 错误。
关于docker - 标准 docker Push 有效,但 buildx(docker-container) 无效 - 导出到镜像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73612351/