【问题标题】:Dynamically passing in an argument into `docker-compose.yml`将参数动态传递到 docker-compose.yml
【发布时间】:2020-02-08 06:52:21
【问题描述】:

我可以在docker-compose.yml 中指定一个参数,如下所示(例如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. 另外,我可以在docker-compose.yml 中指定一个默认值(例如development),以防我什么都不传递?

谢谢!

【问题讨论】:

标签: docker docker-compose environment-variables


【解决方案1】:

是的,你可以这样做。

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

RAILS_ENV=production

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

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

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

${VARIABLE:-default} 如果 VARIABLE 未设置或 环境中空。 ${VARIABLE-default} 评估为默认值 仅当环境中未设置 VARIABLE 时。

例如:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多