为什么docker-compose——build-arg不能为yaml文件工作?



我有一个带参数的.bat,它运行docker-compose build

...
set "Build=Build"
set "PublishConfig=Debug"
...
docker-compose -f backend.yml --env-file ./.env build --build-arg EMP_PUBLISH_CONFIG=%PublishConfig% --build-arg EMP_BUILD_LOCALLY=%Build%
...

。带有变量的Env文件

EMP_PUBLISH_CONFIG=Release
EMP_BUILD_LOCALLY=""

。yml文件

version: "3.7"
... 
services:
customers:
container_name: emp-customers
build:
context: ./../../
dockerfile: ./ci/local/backend/Dockerfile${EMP_BUILD_LOCALLY}
target: emp-customers

和一些dockerfile,比如"DockerfileBuild"one_answers"Dockerfile">

ARG EMP_PUBLISH_CONFIG=Release
FROM deploy AS emp-customers
COPY Src/Customers/Emp.Customers.WebApi/bin/$EMP_PUBLISH_CONFIG/net6.0/linux-x64/publish /app/Emp.Customers.WebApi

变量EMP_PUBLISH_CONFIG正确覆盖从。bat,但是变量emp_build_local只使用。env

中的值有任何想法,为什么,以及如何我可以覆盖变量从。bat?

谢谢。

谢谢。我需要什么-只是设置emp_build_local在shell或.bat之前运行"docker-compose"并且不需要对运行时变量使用——build-arg:

...
set "Build=Build" -replace to set "EMP_BUILD_LOCALLY=Build" (it's overriding variable in .env file)
set "PublishConfig=Debug"
...
docker-compose -f backend.yml --env-file ./.env build --build-arg EMP_PUBLISH_CONFIG=%PublishConfig%
...

1.为什么docker-compose——build-arg对yaml文件不起作用?

构建参数只能在构建时访问。

组合文件定义了运行时执行,因此,它们不能访问构建参数。但是您可以使用环境变量,这就是您的.env文件所做的。

2。…我如何从。bat重写变量?

上下文是环境变量在撰写yaml文件或容器中使用的。环境变量可以直接从主机环境变量或环境变量命令选项定义(--env-file--env)传递。

您的.batset命令创建临时环境变量作为主机环境变量,可以被docker compose命令选项(--env-file--env)覆盖。

一个好的方法是创建不同的环境文件并使用它们通过--env-file命令选项。

引用:

  • https://docs.docker.com/compose/compose-file/compose-file-v3/
  • https://docs.docker.com/compose/environment-variables/
  • https://docs.docker.com/engine/reference/commandline/compose_build/
  • https://docs.docker.com/engine/reference/commandline/compose_run/