如何在docker-compose中传递参数?


Answers:



80

现在docker-compose支持变量替换。

Compose使用docker-compose运行时所在的shell环境中的变量值。例如,假设外壳包含POSTGRES_VERSION=9.3并且您在docker-compose.yml文件中提供此配置:

db:
  image: "postgres:${POSTGRES_VERSION}"

当您运行docker-compose up此配置,撰写外观为POSTGRES_VERSION在外壳和替代它的价值的环境变量。在这个例子中,撰写解析imagepostgres:9.3运行配置之前。


3
构建参数是Docker 1.9的功能,该问题询问如何使Docker Compose使用它们。变量替换无关。
杰克

8
@Jack我知道这不是问题的直接答案,但这可能是一种解决方法,因为docker-compose它不支持传递参数。
Hemerson Varela

18
@Jack我来这里是为了寻找变量替换,所以这对我很有帮助
Andy

暂时将使用此功能。不能docker-compose run用于传递参数,因为必须将参数传递给多个容器。
andho

1
@ weberc2我知道这时候您应该已经知道了,但是我会留给别人使用。您可以将其设置为环境,并在docker-compose.yml文件中使用默认值。 environment:\n PLATFORM_VERSION: "${PLATFORM_VERSION:-v1.0.0}"。PS:\n只是因为我找不到在注释中格式化多行代码块的方法。
悉尼·德·莫拉兹

75

现在可以从docker-compose v2 +作为build对象的一部分完成此操作;

docker-compose.yml

version: '2'
services:
    my_image_name:
        build:
            context: . #current dir as build context
            args:
                var1: 1
                var2: c

请参阅docker compose docs

在上面的示例中,“ var1”和“ var2”将被发送到构建环境。

注意:任何environmentargs变量同名的env变量(使用块指定)将覆盖该变量。


@tfg您知道args按键是否需要小写吗?我所看到的文档和所有示例都使用小写键,但是我没有看到有关必填项的任何提及。
pdoherty926 '16

@ pdoherty926这应该只是bash变量扩展,因此带有下划线的大写和小写应该没问题。
tgallacher '16

@tfg谢谢。同时,我自己得出了这个结论。您是否知道为什么文档/示例使用该约定?
pdoherty926

1
不幸的是,这不适用于堆栈:“当以群集模式(版本3)组成文件以群集模式部署堆栈时,将忽略此选项。docker
joshmcode

@tgallacher AFAIK,environment块中的变量不会覆盖args变量。只是args变量在容器构建过程environment中可用,而变量在容器运行时可用。
Massood Khaari '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.