【问题标题】:How to share the same environment file with Helm and Docker-Compose如何与 Helm 和 Docker-Compose 共享同一个环境文件
【发布时间】:2019-12-14 14:43:34
【问题描述】:

docker-compose 将自动读取与docker-compose.yml 目录相同的.env 文件。考虑到这一点,我继续在 .env 文件中定义 app-container 环境变量来存储容器 URL,如下所示:

app-container=12345.dkr.ecr.us-west-2.amazonaws.com/container-image:v003

然后,在docker-compose.yml 文件中,我将容器 URL 替换为环境变量 app-container

    version: '3'

    services:
      app1:
        build:
          context: .
          dockerfile: my.dockerfile
          image: ${app-container}

如果我可以传递相同的 app-container 环境变量来替换在 Helm 的 values.yaml 文件中定义的容器 URL,那就太好了。因此,不要显式存储容器的 URL

app:
  image: 12345.dkr.ecr.us-west-2.amazonaws.com/container-image:v003

Helm 的 values.yaml 文件可以使用已在 .env 文件中定义并由 docker-compose 使用的相同 app-container 环境变量。 Helm 的values.yaml 文件可以简单地定义为:

app:
  image: ${app-container}

我想知道docker-compose 和 Helm 之间是否可以共享同一个 env 文件?

【问题讨论】:

    标签: docker kubernetes containers kubernetes-helm amazon-eks


    【解决方案1】:

    试试这个,它的小技巧:

    • 首先从.env文件中设置环境变量。
    $ cat .env
    appcontainer=12345.dkr.ecr.us-west-2.amazonaws.com/container-image:v003
    $ while read LINE; do export "$LINE"; done < .env
    

    注意:您需要从 app-container 名称中删除 -。否则在设置环境变量bash: export: app-container=12345.dkr.ecr.us-west-2.amazonaws.com/container-image:v003': not a valid identifier时会出现这个错误

    • 现在使用 --set 选项在 values.yaml 中明确设置该环境。
    helm install --set app.image=$appcontainer ./mychart
    

    但理想情况下,最好为您的 docker-composehelm chart 提供单独的环境。

    希望这会有所帮助。

    【讨论】:

    • 你可以做``` set -a; . .env;设置 +a``` 以避免必须执行该循环,然后将变量传递到您的 helm 命令。而且,如果您在获取 env 文件的同一 shell 中运行 helm 命令,则实际上不需要导出它们。导出是允许子shell继承变量。但总的来说,@mchawre 方法是我所做的。如果您希望配置来自环境变量(如 bitbucket 管道变量),这对 CI 非常有用
    【解决方案2】:

    不是直接的,您必须编写一个脚本来将一种格式转换为另一种格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2022-06-11
      • 2019-08-02
      • 2020-08-09
      • 1970-01-01
      相关资源
      最近更新 更多