我有一个docker-compose.yml
文件,在终端我是typing docker-compose up [something]
,但我也希望将参数传递给docker-compose.yml
。这可能吗?我已阅读有关插值变量的信息,并尝试使用.yml
然后${testval}
在docker-compose up [something] var="test"
文件中指定变量,但我收到以下错误:
警告:未设置testval变量。默认为空字符串。
错误:没有此类服务:testval=test
答案 0 :(得分:14)
根据dnephin answer,我创建了这个sample repo,您可以将变量传递给docker-compose。
用法很简单:
MAC / LINUXTEST= docker-compose up
创建并启动app
和db
容器。然后api应该在端口3030上的docker守护程序上运行。TEST=DO docker-compose up
创建并启动app
和db
容器。 api应该执行npm run test
文件中的package.json
。 $env:TEST="";docker-compose up
创建并启动app
和db
容器。然后api应该在端口3030上的docker守护程序上运行。$env:TEST="do";docker-compose up
创建并启动app
和db
容器。 api应该执行npm run test
文件中的package.json
。 答案 1 :(得分:8)
您需要将变量作为环境变量传递:
testvar=test docker-compose up ...
或
export testvar=test
docker-compose up
答案 2 :(得分:3)
我不确定你想在这里做什么,但如果你需要的是将环境变量传递给特定的容器docker-compose.yml允许你这样做:
web:
...
environment:
- RAILS_ENV=production
- VIRTUAL_HOST=www.example.com
- VIRTUAL_PORT=3011
此变量将特定于您指定的容器,并且不会在容器之间共享。
“docker-compose up”也没有任何争论。
答案 3 :(得分:2)
docker-compose
不要包含任何标志或命令以传递参数。
撰写主要是用于运行服务而非构建图像的工具。
尝试使用每个dockerfile中定义的ARG
作为参数。
它不可能支持每个独特的构建方案,因为docker-compose
不是为此目的而设计的。你只能真正支持最常见的构建方案。
您可以查看有关其主题here的更多信息。
答案 4 :(得分:1)
您可以使用docker-compose build --build-arg app_env=production
构建图像。然后,您可以使用docker-compose up
。这将附加到生成的图像上。
# docker-compose.yml
services:
service_name:
build:
context: .
args:
- app_env=development
....
# Dockerfile
...
ARG app_env
ENV RACK_ENV $app_env
RUN if [ ${APP_ENV} = production ]; run command; else run another command; fi
...
然后在命令行中输入
docker-compose build --build-arg app_env=production
docker-compose up
答案 5 :(得分:1)
您需要确保两件事:
docker-compose.yml
声明了环境变量。例如,services:
app:
image: python3.7
environment:
- "SECRET_KEY=${SECRET_KEY}"
docker-compose up
时,该变量在环境中可用:SECRET_KEY="not a secret" docker-compose up
请注意,这并不等同于在构建过程中传递它们,因为不建议将机密存储在Docker映像中。
答案 6 :(得分:1)
来自文档:
https://docs.docker.com/compose/reference/up/
https://docs.docker.com/compose/reference/build/
您不能将参数传递给 docker-compose up,但您可以将参数传递给 docker-compose build:
<svg>
<path d="M 10,10 H 100 V 50 H 200 V 150 H 50 V 100 H 10 Z M 100,50 H 50 V 100 H 100 Z" fill="blue"/>
</svg>
答案 7 :(得分:0)
不确定在这种情况下是否有帮助,但是您可以在docker-compose.yml脚本中指定命令;您可以为不同的服务名称提供不同的命令,例如
255
执行value * 255
以启动容器,并使用以下命令将其附加到“服务”上:
colorbuffer[2] = Color.r <= 0.0f ? 0 : Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255);
colorbuffer[1] = Color.g <= 0.0f ? 0 : Color.g >= 1.0 ? 255 : (BYTE)(Color.g * 255);
colorbuffer[0] = Color.b <= 0.0f ? 0 : Color.b >= 1.0 ? 255 : (BYTE)(Color.b * 255);
答案 8 :(得分:0)
在处理构建argumenet时,请按照以下方式在compose yml文件中声明它们
services:
app: (name of service
build:
context: docker/app/ (where is your docker build root)
dockerfile: Dockerfile (that is optional)
args:
- COMPOSER_AUTH_TOKEN (name of variable, value will be taken from host environment)
好在运行docker-compose up之前,按照其他人的建议导出变量。会的。我试过了。使用docker compose版本3及更高版本。玩得开心