You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker Compose中传递命名构建上下文至Dockerfile

在Docker Compose中传递多构建上下文的两种方式

你的Dockerfile已经用到了多构建上下文,比如从命名上下文foo复制文件:

COPY --from=foo . /bar

之前用docker buildx build --build-context foo=/my/dir/来构建,下面介绍两种用Docker Compose传递这个命名上下文的方法:

1. 静态硬编码方式

直接在docker-compose.yml里写死foo上下文的路径,配置如下:

services:
  my-service:
    build:
      context: .  # 主构建上下文(Dockerfile所在目录)
      buildkit: true  # 必须开启BuildKit才能支持多构建上下文
      contexts:
        foo: /my/dir/  # 硬编码foo上下文的路径

配置好后,直接运行docker compose build就能完成构建,注意要确保BuildKit已启用——可以临时通过环境变量开启:DOCKER_BUILDKIT=1 docker compose build,或者在Docker daemon配置里永久开启。

2. 动态传递方式

如果不想硬编码路径,可以用以下两种动态传递方式:

方式A:通过环境变量注入

在docker-compose.yml里用环境变量占位符:

services:
  my-service:
    build:
      context: .
      buildkit: true
      contexts:
        foo: ${FOO_CONTEXT_PATH}  # 引用环境变量

运行构建时,直接在命令行传递环境变量:

FOO_CONTEXT_PATH=/my/dir/ docker compose build

或者先导出环境变量再执行构建:

export FOO_CONTEXT_PATH=/my/dir/
docker compose build

方式B:通过命令行参数直接传递

Docker Compose的build命令同样支持--build-context参数,和docker buildx build用法一致,不需要修改Compose文件:

docker compose build --build-context foo=/my/dir/ my-service

内容的提问来源于stack exchange,提问作者Maths noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:15:43