在docker-compose文件中使用buildx构建linux/arm64

24

我可以使用以下命令单独构建我的Dockerfile:

docker buildx build --platform linux/arm64 -t testbuild .

现在我想在docker-compose文件中使用buildx,但是如何使用以及如何指定我想使用arm64架构?这是我使用普通构建时的结构。

testbuild:
build: …/testbuild
image: testbuild

有人知道吗?

4个回答

12

您可以通过设置环境变量COMPOSE_DOCKER_CLI_BUILD=1在docker-compose中使用buildx,如果buildx未设置为默认值,则还应添加DOCKER_BUILDKIT=1

COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build

2
我认为这激活了 BuildKit,而不是 buildx。 - scytale
同 @scytale 的意见一致,启用 COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 来使用 buildx ,但它们无法触发正确的跨平台构建。--platform 在 docker-compose 版本高于 2.4 时无法工作。 - Jorge

7
在docker-compose v2.4中新增了platform属性。官方文档在此处
示例:
version: '2.4'

services:
  testbuild:
    build: .../testbuild
    image: testbuild
    platform: linux/arm64/v8

附言:我不知道为什么,但它只在docker-compose版本2.4中起作用。

关于docker-compose中的dockerx,它不存在。我认为这是因为dockerx是docker引擎中的实验性特性


5
尝试使用docker buildx bake命令。官方文档说:

使用-f / --file选项指定要使用的构建定义文件。该文件可以是Docker Compose、JSON或HCL文件。

此外,它还允许您传递要构建的目标名称,以仅构建特定目标。

这应该是正确的答案。 - undefined

4

尝试

COMPOSE_DOCKER_CLI_BUILD=1 \
DOCKER_BUILDKIT=1 \
DOCKER_DEFAULT_PLATFORM=linux/amd64 \
docker-compose build

DOCKER_BUILDKIT

启用(1)或禁用(0)BuildKit构建

DOCKER_DEFAULT_PLATFORM

为采用--platform标志的命令设置默认平台

COMPOSE_DOCKER_CLI_BUILD

配置是否使用Compose内置的Python客户端(0)来构建镜像,还是使用本机的Docker CLI(1)。默认情况下,Compose使用Docker CLI来执行构建,这允许您使用BuildKit执行构建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接