【问题标题】:Read JSON-file into environment variable with Docker Compose使用 Docker Compose 将 JSON 文件读入环境变量
【发布时间】:2016-04-17 19:03:42
【问题描述】:

我已经使用Meteord 对 Meteor 应用程序进行了 docker 化,效果很好,我的问题是我想将一些设置传递给应用程序。

Meteord 不会像通常为应用程序提供设置那样使用设置文件启动应用程序 (meteor --settings file.json)。这也可以做到with an environement variable 称为METEOR_SETTINGS

由于我希望 webapp 与其他服务一起运行,我正在使用 Docker Compose。

我有我的settings.json-文件,我想将其作为环境变量读取,例如:

  environment:
   - METEOR_SETTINGS=$cat(settings.json)

但这不起作用。

如何让 Docker compose 基于 JSON 文件动态创建此环境变量?

【问题讨论】:

    标签: json docker docker-compose dockerfile


    【解决方案1】:

    一个简单的方法是将 JSON 文件加载到本地环境变量中,然后在您的 yaml 文件中使用它。

    在 docker-compose.yml 中

    environment:
      METEOR_SETTINGS: ${METEOR_SETTINGS}
    

    在调用 docker-compose 之前加载设置文件:

    ❯ METEOR_SETTINGS=$(cat settings.json) docker-compose up
    

    【讨论】:

      【解决方案2】:

      没有一些技巧是不可能的,这取决于settings.json 中可调整变量的数量:

      如果有很多设置,使用简单的 shell 脚本来模板 docker-compose.yml 相当容易,该脚本将模板中的标记替换为 settings.json 的内容,就像在您的示例中一样。在这种情况下,您还想包装 docker-compose 调用。简化示例:

      docker-compose.yml.template

      environment:
       - METEOR_SETTINGS=##_METEOR_SETTINGS_##
      

      dc.sh

      #!/bin/sh
      # replace ##_METEOR_SETTINGS_## with contents of settings.json and output to docker-compose.yml
      sed -e 's|##_METEOR_SETTINGS_##|'"$(cat ./settings.json)"'|' \
          "./docker-compose.yml.template" > "./docker-compose.yml"
      # wrap docker-compose, passing all arguments
      docker-compose "$@"
      

      将 2 个文件放入您的项目根目录,然后将 chmod +x dc.sh 使包装器可执行并调用 ./dc.sh -h

      如果只是一些设置,您可以在容器启动时处理 inside 容器的模板。只需在启动 Meteor 之前将放置在准备好的 settings.json 中的令牌替换为传递给 docker 的 ENV 值。这允许您只使用 docker-compose ENV 功能来配置 Meteor。

      【讨论】:

      • 谢谢!包装 docker-compose 调用是什么意思,您能否在答案中提供一个带有 shell 脚本的模板技术示例?
      • 我更新了答案,未经测试,但应该能让你继续前进。
      • 唯一的问题是我发现 Meteor 无法访问内置的环境变量,所以你必须通过 Node.js 访问。我的解决方案是将 JSON 设置粘贴到 env-file 中的 METEOR_SETTINGS 变量中,但如果一个设置变量有很多,我建议调整此建议的脚本,以便脚本为您创建 env 文件。
      猜你喜欢
      • 2020-07-16
      • 2018-05-31
      • 2015-06-17
      • 2015-05-29
      • 2018-02-11
      • 2019-07-26
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多