我有一个带参数的.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
)传递。
您的.bat
set
命令创建临时环境变量作为主机环境变量,可以被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/