最近本地开发编译docker镜像发现了一个情况,命名我本地的docker已经配置了镜像加速,但是使用docker buildx build … 编译镜像的时候还是报错
大致报错内容
Dev:~/my_code/sun-short-link# docker buildx build --platform linux/amd64 -t hslr/sun-short-link:beta --push .
[+] Building 10.5s (3/3) FINISHED docker-container:mybuilder
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 818B 0.0s
=> WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 3) 0.1s
=> ERROR [internal] load metadata for docker.io/library/alpine:latest 10.0s
=> CANCELED [internal] load metadata for docker.io/library/golang:1.21-alpine3.18 10.0s
------
> [internal] load metadata for docker.io/library/alpine:latest:
------
1 warning found (use docker --debug to expand):
- FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 3)
Dockerfile:21
因为docker buildx 使用的是 BuildKit 引擎,并且是基于容器构建的镜像,这时候我觉得BuildKit的构建容器无法使用外面配置的镜像加速配置,后来我问了一下ai如何配置BuildKit的镜像加速
你的分析非常准确!Docker buildx 默认使用基于容器的构建器(docker-container
driver),它的 BuildKit 环境是独立运行的,因此不会自动继承宿主机 Docker 的镜像加速配置。需要单独为 buildx 的 BuildKit 配置镜像加速才能生效。
docker buildx ls
输出示例(重点看 DRIVER
列):
NAME DRIVER/IMAGE
mybuilder docker-container
default docker
DRIVER
是 docker
(非容器模式),镜像加速配置可能无效,建议切换到 docker-container
驱动。BuildKit 的配置通过 buildkitd.toml
文件管理。你需要将此文件挂载到 buildx 的 BuildKit 容器中。
创建配置文件目录:
sudo mkdir -p /etc/buildkit
sudo nano /etc/buildkit/buildkitd.toml
添加镜像加速配置(以阿里云为例):
[registry."docker.io"]
mirrors = ["<你的镜像加速地址>"]
具体加速地址替换为:
https://<你的ID>.mirror.aliyuncs.com
(需登录阿里云容器镜像服务获取)https://mirror.ccs.tencentyun.com
https://<你的ID>.swr.huaweicloud.com
示例(阿里云):
[registry."docker.io"]
mirrors = ["https://1234abcd.mirror.aliyuncs.com"]
移除旧构建器(可选):
docker buildx rm mybuilder
创建新构建器,并挂载 BuildKit 配置:
docker buildx create \
--name mybuilder \
--driver docker-container \
--driver-opt image=moby/buildkit:latest \
--config /etc/buildkit/buildkitd.toml \ # 关键:挂载配置文件
--use
启动构建器:
docker buildx inspect mybuilder --bootstrap
查看日志,确认镜像加速已加载:
docker logs buildx_buildkit_mybuilder0 # 替换为实际容器名
如果看到类似以下输出,说明配置成功:
INFO[0000] mirror configuration: registry="docker.io" mirrors=["https://1234abcd.mirror.aliyuncs.com"]
docker buildx build --platform linux/amd64 -t hslr/sun-short-link:beta --push .
代理配置(如果服务器需要代理):
buildkitd.toml
中添加代理环境变量:
[worker.oci]
env = ["HTTP_PROXY=http://proxy-ip:port", "HTTPS_PROXY=http://proxy-ip:port"]
多平台构建的镜像加速:
linux/arm64
),建议直接替换基础镜像为国内源:
FROM registry.cn-hangzhou.aliyuncs.com/google_containers/alpine:latest
通过上述配置,buildx 的 BuildKit 容器会直接使用你指定的镜像加速源,绕过 Docker Hub 的网络限制。如果仍有问题,请提供 docker buildx build
的完整输出和 buildkitd.toml
内容,以便进一步排查。
正在学习Go语言的PHP程序员。