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

时间:2018-07-06 15:16:42

标签: docker environment-variables

我正在使用base.env作为我的多个docker服务的env_file。在这个base.env中,我有一部分环境变量在整个文件中重复。例如,对于三个不同的环境变量,端口和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文件? 谢谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您实际上可以这样做(至少在vlucas / dotenv包(php)中,不确定其他人,请您自己检查)

MAIL_NAME=${MAIL_FROM}

详细了解here

答案 1 :(得分:0)

由于env_file不能作为bash命令运行,因此无法执行此操作。这意味着不会创建该变量,然后将其串联到它出现的下一个变量中。这些值将像在env_file中一样被读入。

答案 2 :(得分:0)

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

相关问题