【问题标题】:Rename environment variables重命名环境变量
【发布时间】:2021-06-16 09:45:28
【问题描述】:

Heroku 目前将数据库凭据作为一个连接字符串提供,即:postgres://foo:bar@baz/fubarDb

我的开发环境由一个 PostgreSQL 容器和一个使用 docker-compose 文件编排的应用程序容器组成。 docker-compose 文件提供来自 .env 文件的环境变量,目前看起来有点像这样:

DB_USER=foo
DB_PASS=bar
DB_HOST=baz

这些凭据作为环境变量传递给我的应用程序,一切正常。问题是,为了完成这项工作,我必须在我的数据库连接信息中检查null 以查看是否有完整的数据库 URL 并使用它......否则回退到个人凭据......

【问题讨论】:

  • 你为什么不改变你的容器想要的环境变量?
  • @Chris 因为我的 compose 文件(用于开发)中的 postgres 容器需要它用来配置自身的单个变量。然后我的应用程序容器也使用了这些相同的变量,我可以确定它们是同步和一致的。现在,我必须支持用于生产的 URL 和用于开发的单个 var,并对 URL 进行空检查,如下所示:github.com/robertmain/meal-plan/blob/master/src/server/… 它很乱。
  • 您不应该在 Heroku 上拥有 Postgres 容器。你不能自己跑。对于web 进程,唯一允许的入站连接位于端口 443 和 80 上。使用 Heroku's own Postgres serviceRDS 或类似的托管数据库。
  • edit您的问题并在此处显示相关代码,而不是要求我们离开现场。 Stack Overflow 模型部分是为了帮助未来的用户以及当前的用户,并且链接可能会中断。另外,请参阅How to Ask,其中部分内容是“假装您正在与一位忙碌的同事交谈”。您越容易让我们理解您的问题,您的运气就越好。
  • 干得好自己追这个!很高兴你把它整理好了。

标签: variables heroku rename environment


【解决方案1】:

天啊!因此,解决方案是修改我的docker-compose 文件以获取环境变量并将它们连接成一个连接字符串:

diff --git a/docker-compose.yml b/docker-compose.yml
index 21f0d47..74a574e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -16,14 +16,10 @@ services:
       context: .
       target: base
     environment:
-      - APP_NAME
-      - DB_HOST
-      - DB_PORT
-      - DB_NAME
-      - DB_USER
-      - DB_PASS
-      - NODE_ENV
-      - PORT
+      APP_NAME: ${APP_NAME}
+      NODE_ENV: ${NODE_ENV}
+      PORT: ${PORT}
+      DATABASE_URL: postgres://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}
     user: "1000:1000"
     ports:
       - "127.0.0.1:${PORT}:${PORT}"

不再需要猜测要查找哪些环境变量!

【讨论】:

  • 这里有明显的混淆: .env 文件,它用于 docker-compose.YAML 文件中的变量替换,当您在服务定义中运行 docker-compose config env_file 元素时应该解决,这只是将环境文件设置为在启动容器时发送到 docker 引擎,作为运行时 nvironment 的定义。 Compose 不会解析这个对他来说不透明的文件。来源:github.com/docker/compose/issues/6581
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多