【问题标题】:Build image with builctl (buildkit) then run it with docker使用 builctl (buildkit) 构建镜像,然后使用 docker 运行它
【发布时间】:2023-02-16 11:51:36
【问题描述】:

我想使用最新版本的 buildkit 来构建我的 docker 镜像,因为最新版本的 docker 中包含的 buildkit 版本存在一些错误。

是否可以使用 buildctl 命令构建镜像的本地版本,然后使用 docker run 运行此镜像?

我试过添加 --output type=image,name=<tag>,push=false 但 docker 没有找到这张图片。我想避免推送此图像,因为它仅用于运行某些测试。我已经设法使用--export-cache type=local,dest=<folder> 在本地导出缓存,但我不确定如何从docker run 使用它。

或者,是否可以升级 docker 在其发布的 dind 容器中使用的 buildkit 版本?

【问题讨论】:

  • 我遇到了同样的问题,当我尝试使用push=True(我理解这意味着推送到我的本地注册表)时,我得到了server message: insufficient_scope: authorization failed

标签: docker docker-buildkit


【解决方案1】:

根据文档,当使用 buildxdocker 驱动程序(也使用 BuildKit)时,您应该能够使用 type=docker 并将其加载到 docker 守护进程中。

https://docs.docker.com/engine/reference/commandline/buildx_build/#output

图像导出器将构建结果写入图像或清单 列表。当使用 docker 驱动程序时,图像将出现在 docker images 中。 可选地,图像可以自动推送到注册表 指定属性。

属性键:

name - name (references) for the new image.
push - boolean to automatically push the image.

我不确定 buildctl/buildkitd 有何不同,但是当我尝试使用 docker 输出时,它会让您指定一个输出文件,而不是将其加载到守护程序中。

因此,与其直接加载它,不如将其保存到压缩包中,然后将其加载到 docker 中。

buildctl build --frontend dockerfile.v0 
  --opt build-arg:VERSION=$BUILD_VERSION 
  --opt context=my-image:$BUILD_VERSION 
  --local context=. 
  --local dockerfile=. 
  --output type=docker,dest=./my-image_$BUILD_VERSION.tar,name=my-image:$BUILD_VERSION

docker load --input my-image.tar

可能有更直接的方法,但这是我在尝试 buildkitd/buildctl 的非常有限的文档中的所有输出选项时,以及尝试通过 docker buildx 创建本地图像但失败的唯一方法.

【讨论】:

    猜你喜欢
    • 2022-12-14
    • 1970-01-01
    • 2020-10-06
    • 2014-09-16
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多