如何使用 .env 文件中的环境变量来填写同一个 .env 文件中的其他环境变量

Posted

技术标签:

【中文标题】如何使用 .env 文件中的环境变量来填写同一个 .env 文件中的其他环境变量【英文标题】:How to Use Environment Variables in a .env file to fill out other environment variable in the same .env file 【发布时间】:2018-12-15 05:46:54 【问题描述】:

我使用 base.env 作为我的几个 docker 服务的 env_file。在这个 base.env 中,我有几个环境变量部分在整个文件中重复。例如,对于三个不同的环境变量,port 和 ip 是相同的。 我想在环境变量中指定这些变量,然后重复使用这些变量来填写其他环境变量。

这里是 base.env:

### Kafka
# kafka's port is 9092 by default in the docker-compose file
KAFKA_PORT_NUMBER=9092
KAFKA_TOPIC=some-topic
KAFKA_IP=kafka
KAFKA_CONN: //$KAFKA_IP:$KAFKA_PORT_NUMBER/$KAFKA_TOPIC
# kafka topic that is to be created. Note that ':1:3' should remain the same.
KAFKA_CREATE_TOPICS=$KAFKA_TOPIC:1:3
# the url for connecting to kafka
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://$KAFKA_IP:$KAFKA_PORT_NUMBER

我试过写

KAFKA_CONN: //$$KAFKA_IP:$$KAFKA_PORT_NUMBER/$$KAFKA_TOPIC

在 docker-compose.yml 中相应服务的环境部分,但这会被解释为容器中的文字字符串。

有没有办法在 base.env 文件中做我想做的事? 感谢您的帮助!

【问题讨论】:

【参考方案1】:

我在 Node.js 和 React.js 中使用了 $,并且都有效

POSTGRES_PORT=5432

DATABASE_URL="postgresql://root@localhost:$POSTGRES_PORT/dbname"

并做出反应

REACT_APP_DOMAIN=domain.com

#API Configurations
REACT_APP_API_DOMAIN=$REACT_APP_DOMAIN

【讨论】:

【参考方案2】:

使用 Nextjs,在 .env.local 文件中我有以下变量:

NEXT_PUBLIC_BASE_URL = http://localhost:5000

NEXT_PUBLIC_API_USERS_URL_REGISTER = $NEXT_PUBLIC_BASE_URL/api/users/register

效果很好,我在变量NEXT_PUBLIC_API_USERS_URL_REGISTER中使用了变量NEXT_PUBLIC_BASE_URL

【讨论】:

【参考方案3】:

其实可以这样(至少在vlucas/dotenv包(php)中,其他的不清楚,请自行查看)

MAIL_NAME=$MAIL_FROM

阅读更多信息here

【讨论】:

这行不通。 您使用什么库/语言? @amechi。除此之外,仅使用 vlucas/dotenv 包进行了测试。如果这不适用于您选择的语言,那么它已经被提及。【参考方案4】:

我知道我参加聚会有点晚了,但我有同样的问题,我找到了解决方法。有一个名为 env-cmd 的包,它允许您将 .js 文件用作 .env 文件。该文件只需要导出一个对象,键是环境变量名称,值是值。现在,这允许您在导出环境变量之前运行 javascript,从而使用环境变量来设置其他变量。

【讨论】:

【参考方案5】:

没有办法在 env_file 中执行此操作,因为它不是作为 bash 命令运行的。这意味着变量没有被创建,然后连接到它出现的下一个变量中。值只是在 env_file 中读入。

【讨论】:

以上是关于如何使用 .env 文件中的环境变量来填写同一个 .env 文件中的其他环境变量的主要内容,如果未能解决你的问题,请参考以下文章

关于Lumen / Laravel .env 文件中的环境变量是如何生效的

如何从.env文件获取环境变量到docker-compose.yml?

如何在 vscode 中访问 tasks.json 中的 .env 变量?

.env 文件中的环境变量在 django、heroku 的本地迁移期间不可用

如何在 docker .env 文件中使用环境变量?

使用 Python 和 dotenv 更改保存在 .env 文件中的环境变量