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

don*_*eas 4 docker dockerfile docker-compose

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

docker buildx build --platform linux/arm64 -t testbuild .
Run Code Online (Sandbox Code Playgroud)

现在我想在 docker-compose 文件中使用 buildx,但是如何以及怎么说我想使用 arm64 架构?这是我使用正常构建时的结构。

testbuild:
build: …/testbuild
image: testbuild
Run Code Online (Sandbox Code Playgroud)

有人知道吗?

Sta*_*nin 8

在 docker-compose v2.4 中添加了 attribute platform。官方文档在这里

例子:

version: '2.4'

services:
  testbuild:
    build: .../testbuild
    image: testbuild
    platform: linux/arm64/v8
Run Code Online (Sandbox Code Playgroud)

PS 我不知道为什么,但它只适用于 docker-compose 版本 2.4

PSS 关于dockerxdocker-compose,他不在那儿。我认为因为dockerx这是docker 引擎中的实验性功能。


hen*_*rkh 6

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

COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build
Run Code Online (Sandbox Code Playgroud)

  • 我认为这启用了 Build*Kit*,而不是 buildx (2认同)

小智 6

尝试一下docker buildx bake命令。官方文档说:

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

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


Ali*_*ets 5

尝试

COMPOSE_DOCKER_CLI_BUILD=1 \
DOCKER_BUILDKIT=1 \
DOCKER_DEFAULT_PLATFORM=linux/amd64 \
docker-compose build
Run Code Online (Sandbox Code Playgroud)

DOCKER_BUILDKIT

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

DOCKER_DEFAULT_PLATFORM

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

COMPOSE_DOCKER_CLI_BUILD

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