动态将参数传递给docker-compose.yml

时间:2019-10-10 18:59:39

标签: docker docker-compose environment-variables

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

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: production

Dockerfile使用此ARG并设置ENV,以便使用该环境变量构建我的图像:

FROM ruby:2.5.1

# ...

ARG RAILS_ENV
ENV RAILS_ENV=$RAILS_ENV

# ...
# Image contains environment variable `$RAILS_ENV` as `"production"`

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

  1. 是否可以将变量动态传递到docker-compose.yml文件中?

  2. 此外,我可以在development中指定默认值(例如docker-compose.yml),以防万一我什么也没传递?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,您可以这样做。

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

RAILS_ENV=production

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

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV}

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

  如果未设置VARIABLE或

$ {VARIABLE:-default}的值为默认值   在环境中是空的。 $ {VARIABLE-default}计算为默认值   仅在环境中未设置VARIABLE的情况下。

例如:

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV:-development}

在此处了解更多信息:https://docs.docker.com/compose/compose-file/#variable-substitution

相关问题