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

mea*_*our 68 docker dockerfile docker-compose

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

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

小智 73

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

泊坞窗,compose.yml

version: '2'
services:
    my_image_name:
        build:
            context: . #current dir as build context
            args:
                var1: 1
                var2: c
Run Code Online (Sandbox Code Playgroud)

请参阅docker撰写文档.

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

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


Hem*_*ela 69

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

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

db:
  image: "postgres:${POSTGRES_VERSION}"
Run Code Online (Sandbox Code Playgroud)

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

  • @Jack我来这里寻找变量替换所以这对我有帮助 (12认同)
  • @Jack我知道这不是问题的直接答案,但它可能是一种解决方法,因为`docker-compose`不支持传递参数. (6认同)
  • 构建参数是Docker 1.9的一个特性,问题是如何让Docker Compose使用它们.变量替换是无关的. (3认同)
  • @weberc2 我知道此时你应该已经想通了,但我会把它留在这里给其他人。你可以在你的 `docker-compose.yml` 文件中将它设置为一个具有默认值的环境。`环境:\n 平台版本:“${PLATFORM_VERSION:-v1.0.0}”`。PS:`\n` 只是因为我找不到在注释中格式化多行代码块的方法。 (3认同)

dne*_*hin 28

此功能已在Compose 1.6中添加.

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

services:
  web:
    build:
      context: .
      args:
        FOO: foo
Run Code Online (Sandbox Code Playgroud)


Jho*_*los 8

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

    export TAG=0.1.2
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在 docker-compose.yml 中设置变量

    db:
      image: "redis:${TAG}"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 验证值是否被替换

    docker-compose config
    
    Run Code Online (Sandbox Code Playgroud)


And*_*zan 7

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