docker - 在 docker-compose 文件中访问 env 文件变量
问题描述
我有一个环境文件,其中包含一个名为Database_User
.
在我的 docker-compose 中,我有这个:
services:
database:
container_name: postgres
hostname: db
image: postgres:12-alpine
environment:
- POSTGRES_USER=${Database_User}
ports:
- "54321:5432"
env_file: project/myproject/.env
但是,我收到一个错误:
未设置 Database_User 变量。默认为空字符串。
解决方案
要做到这一点,正确理解environment
和env_file
属性与.env
文件之间的区别很重要:
environment
并env_file
让您指定要在容器中设置的环境变量:environment
您可以在docker-compose.yml
- 与
env_file
您一起从该文件中隐式导入所有变量 - 将两者混合在同一个服务上是不好的做法,因为它很容易导致意外行为
- 该
.env
文件被加载到可以使用它 的自身docker-compose
环境中docker-compose
因此,您当前的配置不会像您认为的那样做:
env_file: project/myproject/.env
将该文件加载到容器.env
的环境中,而不是. 因此不会为变量替换设置:docker-compose
Database_User
environment:
- POSTGRES_USER=${Database_User}
此处的解决方案:env_file
从您的目录中删除docker-compose.yml
并放置.env
在您开始的同一目录中docker-compose
。或者,您可以通过带有标志的路径指定.env
--env-file
文件:
docker-compose --env-file project/myproject/.env up
推荐阅读
- android - d8:从命令行使用它时出现奇怪的异常
- angular - 带有 Angular 11 的 Google Chart Timeline。许多选项不起作用
- php - 在 php shell_exec 中运行 kubectl 返回并为空列表
- python - 如何获得代币对的总流动性?
- spring-boot - Spring Boot - 2.5.4 - 由于缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext
- react-native - 授予 Apple Health Kit 许可后转到下一页
- javascript - 获取失败 - Heroku
- firebase - 颤振错误 Firebase/Firestore- 空值检查运算符用于空值
- solidity - 如何获得从 Solidity 到 Web3 的“真实”块哈希
- c# - 如何从 C# foreach 中删除重复值?