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

时间:2015-12-16 21:41:37

标签: docker dockerfile docker-compose

Docker 1.9允许将参数传递给dockerfile。 请参见链接:https://docs.docker.com/engine/reference/builder/#arg

如何在docker-compose.yml中传递相同的参数?
如果可能的话,请提供一个例子。

3 个答案:

答案 0 :(得分:68)

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

  

搬运工-compose.yml

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

请参阅the docker compose docs

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

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

答案 1 :(得分:64)

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

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

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

使用此配置运行docker-compose up时,Compose会在shell中查找POSTGRES_VERSION环境变量并替换其值。对于此示例,Compose会将image解析为{{ 1}}在运行配置之前。

答案 2 :(得分:1)

要添加到这些答案中的一点是,args 仅在使用 docker-compose up --build 时被拾取,而在使用 docker-compose build 时不会被拾取。如果您想分步构建和运行,则需要使用 docker-compose build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}docker build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}