动态地将参数传递到“docker-compose.yml”中

use*_*003 3 environment-variables docker docker-compose

我可以指定一个arg,docker-compose.yml如下所示(例如RAILS_ENV

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: production
Run Code Online (Sandbox Code Playgroud)

使用DockerfileARG并设置一个,ENV以便使用该环境变量构建我的图像:

FROM ruby:2.5.1

# ...

ARG RAILS_ENV
ENV RAILS_ENV=$RAILS_ENV

# ...
# Image contains environment variable `$RAILS_ENV` as `"production"`
Run Code Online (Sandbox Code Playgroud)

但是,如果我想使用硬编码值以外的其他值怎么办"production"

  1. 有没有办法将变量docker-compose.yml动态传递到文件中?

  2. 另外,如果我不传递任何内容,我可以指定默认值(例如development)吗?docker-compose.yml

谢谢!

Mar*_*iba 5

是的,你可以这样做。

首先,您需要.env使用变量创建(与您的位于同一位置Dockerfile):

RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)

您没有将此文件提交到存储库(您应该将其添加到.gitignore)。然后您可以开始在以下位置使用它们Dockerfile

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV}
Run Code Online (Sandbox Code Playgroud)

有两种方法可以定义变量的默认值:

如果 VARIABLE 在环境中未设置或为空,则 ${VARIABLE:-default} 计算为默认值。仅当环境中未设置 VARIABLE 时,${VARIABLE-default} 才会计算为默认值。

例如:

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV:-development}
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多内容:https ://docs.docker.com/compose/compose-file/#variable-substitution