如何在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
相关产品推荐
相关产品推荐

