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

How to pass arguments within docker-compose?

Docker 1.9 允许将参数传递给 docker 文件。 参见 link:https://docs.docker.com/engine/reference/builder/#arg

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

此功能是在 Compose 文件格式 1.6 中添加的。

参考:https://docs.docker.com/compose/compose-file/#args

services:
  web:
    build:
      context: .
      args:
        FOO: foo

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

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

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

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

这现在可以从 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

参见 the docker compose docs

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

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

要添加到这些答案中的是 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}

  1. 在 Linux 上创建变量环境 shell:

    export TAG=0.1.2
    
  2. 设置里面的变量docker-compose.yml

    db:
      image: "redis:${TAG}"
    
  3. 验证值是否被替换

    docker-compose config