docker buildx 配置镜像加速【BuildKit配置镜像加速】


问题

最近本地开发编译docker镜像发现了一个情况,命名我本地的docker已经配置了镜像加速,但是使用docker buildx build … 编译镜像的时候还是报错

大致报错内容

  1. Dev:~/my_code/sun-short-link# docker buildx build --platform linux/amd64 -t hslr/sun-short-link:beta --push .
  2. [+] Building 10.5s (3/3) FINISHED docker-container:mybuilder
  3. => [internal] load build definition from Dockerfile 0.1s
  4. => => transferring dockerfile: 818B 0.0s
  5. => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 3) 0.1s
  6. => ERROR [internal] load metadata for docker.io/library/alpine:latest 10.0s
  7. => CANCELED [internal] load metadata for docker.io/library/golang:1.21-alpine3.18 10.0s
  8. ------
  9. > [internal] load metadata for docker.io/library/alpine:latest:
  10. ------
  11. 1 warning found (use docker --debug to expand):
  12. - FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 3)
  13. Dockerfile:21

因为docker buildx 使用的是 BuildKit 引擎,并且是基于容器构建的镜像,这时候我觉得BuildKit的构建容器无法使用外面配置的镜像加速配置,后来我问了一下ai如何配置BuildKit的镜像加速

以下是 AI 给出的解决方案

你的分析非常准确!Docker buildx 默认使用基于容器的构建器(docker-container driver),它的 BuildKit 环境是独立运行的,因此不会自动继承宿主机 Docker 的镜像加速配置。需要单独为 buildx 的 BuildKit 配置镜像加速才能生效。

解决方案:为 buildx 的 BuildKit 单独配置镜像加速

步骤 1:确认当前 buildx 使用的构建器类型

  1. docker buildx ls

输出示例(重点看 DRIVER 列):

  1. NAME DRIVER/IMAGE
  2. mybuilder docker-container
  3. default docker
  • 如果 DRIVERdocker(非容器模式),镜像加速配置可能无效,建议切换到 docker-container 驱动。

步骤 2:创建或修改 BuildKit 配置文件

BuildKit 的配置通过 buildkitd.toml 文件管理。你需要将此文件挂载到 buildx 的 BuildKit 容器中。

  1. 创建配置文件目录

    1. sudo mkdir -p /etc/buildkit
    2. sudo nano /etc/buildkit/buildkitd.toml
  2. 添加镜像加速配置(以阿里云为例):

    1. [registry."docker.io"]
    2. mirrors = ["<你的镜像加速地址>"]

    具体加速地址替换为:

    • 阿里云https://<你的ID>.mirror.aliyuncs.com(需登录阿里云容器镜像服务获取)
    • 腾讯云https://mirror.ccs.tencentyun.com
    • 华为云https://<你的ID>.swr.huaweicloud.com

    示例(阿里云):

    1. [registry."docker.io"]
    2. mirrors = ["https://1234abcd.mirror.aliyuncs.com"]

步骤 3:创建或更新 buildx 构建器

  1. 移除旧构建器(可选):

    1. docker buildx rm mybuilder
  2. 创建新构建器,并挂载 BuildKit 配置:

    1. docker buildx create \
    2. --name mybuilder \
    3. --driver docker-container \
    4. --driver-opt image=moby/buildkit:latest \
    5. --config /etc/buildkit/buildkitd.toml \ # 关键:挂载配置文件
    6. --use

步骤 4:验证配置是否生效

  1. 启动构建器

    1. docker buildx inspect mybuilder --bootstrap
  2. 查看日志,确认镜像加速已加载:

    1. docker logs buildx_buildkit_mybuilder0 # 替换为实际容器名

    如果看到类似以下输出,说明配置成功:

    1. INFO[0000] mirror configuration: registry="docker.io" mirrors=["https://1234abcd.mirror.aliyuncs.com"]

步骤 5:重新运行构建命令

  1. docker buildx build --platform linux/amd64 -t hslr/sun-short-link:beta --push .

其他注意事项

  1. 代理配置(如果服务器需要代理):

    • buildkitd.toml 中添加代理环境变量:
      1. [worker.oci]
      2. env = ["HTTP_PROXY=http://proxy-ip:port", "HTTPS_PROXY=http://proxy-ip:port"]
  2. 多平台构建的镜像加速

    • 国内镜像源可能不支持多平台镜像(如 linux/arm64),建议直接替换基础镜像为国内源:
      1. FROM registry.cn-hangzhou.aliyuncs.com/google_containers/alpine:latest

通过上述配置,buildx 的 BuildKit 容器会直接使用你指定的镜像加速源,绕过 Docker Hub 的网络限制。如果仍有问题,请提供 docker buildx build 的完整输出和 buildkitd.toml 内容,以便进一步排查。