How to pass arguments within docker-compose?
docker 1.9允许向dockerfile传递参数。参见链接:https://docs.docker.com/engine/reference/builder/arg
如何在docker-compose.yml中传递相同的参数?如果可能,请提供一个示例。
现在可以在docker compose v2+作为build对象的一部分时完成此操作;
docker-compose.yml
1 2 3 4 5 6 7 8
| version: '2'
services:
my_image_name:
build:
context: . #current dir as build context
args:
var1: 1
var2: c |
请参阅Docker撰写文档。
在上面的示例中,"var1"和"var2"将发送到构建环境。
注:任何与args变量同名的env变量(使用environment块指定)都将覆盖该变量。
- 多亏了context部分,文件里找不到了。
- @tfg您知道args键是否需要小写吗?文档和我看到的所有示例都使用小写键,但我没有看到需要这样做的任何提及。
- @pdoherty926这应该只是bash变量扩展,所以带下划线的大小写应该可以。
- 谢谢。同时我自己也得出了这个结论。您知道为什么文档/示例使用该约定吗?
- 不幸的是,这对堆栈不起作用:"当在Swarm模式下使用(版本3)撰写文件部署堆栈时,忽略此选项。docker stack命令只接受docs.docker.com/compose/compose file/build中的预构建图像。
- @tgallacher afaik,environment块中的变量不会覆盖args变量。只是在容器构建过程中,args变量是可用的,但是在容器运行时,environment变量是可用的。
现在,docker-compose支持变量替换。
compose使用运行docker-compose的shell环境中的变量值。例如,假设shell包含POSTGRES_VERSION=9.3,并且您在docker-compose.yml文件中提供了此配置:
1 2
| db:
image:"postgres:${POSTGRES_VERSION}" |
当使用此配置运行docker-compose up时,compose会在shell中查找POSTGRES_VERSION环境变量,并将其值替换为中的值。对于这个例子,compose在运行配置之前将image解析为postgres:9.3。
- 构建参数是docker 1.9的一个特性,问题是如何让docker compose使用它们。变量替换是不相关的。
- @杰克,我知道这不是对这个问题的直接回答,但这可能是一个解决办法,因为docker-compose不支持传递论点。
- @杰克,我来找变量替换,所以这对我有帮助
- 暂时会用这个。不能使用docker-compose run传递参数,因为必须将参数传递给多个容器。
- 有没有办法在一个地方设置默认值?我们一直在做${PLATFORM_VERSION:-v1.0.0},如果把违约放在一个地方就好了。
- @Weberc2我知道此时你应该知道,但我会把它留给其他人。您可以将其设置为在您的docker-compose.yml文件中具有默认值的环境。environment:
PLATFORM_VERSION:"${PLATFORM_VERSION:-v1.0.0}"。ps:
只是因为我找不到一种在注释中格式化多行代码块的方法。
此功能已添加到Compose 1.6中。
参考:https://docs.docker.com/compose/compose file/args
1 2 3 4 5 6
| services:
web:
build:
context: .
args:
FOO: foo |