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

Pet*_*man 15 environment-variables docker

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

我试过写作

KAFKA_CONN: //$${KAFKA_IP}:$${KAFKA_PORT_NUMBER}/$${KAFKA_TOPIC}
Run Code Online (Sandbox Code Playgroud)

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

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

Ham*_*oja 15

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

POSTGRES_PORT=5432

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

Run Code Online (Sandbox Code Playgroud)

并在反应中

REACT_APP_DOMAIN=domain.com

#API Configurations
REACT_APP_API_DOMAIN=$REACT_APP_DOMAIN

Run Code Online (Sandbox Code Playgroud)


Sau*_*shi 13

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

MAIL_NAME=${MAIL_FROM}
Run Code Online (Sandbox Code Playgroud)

在此处阅读更多相关信息

  • 这是行不通的。 (6认同)

Pet*_*man 11

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

  • 确实需要更多有关什么在哪里起作用的详细信息。 (2认同)