tem*_* as 12 docker dockerfile docker-compose
我有一个环境文件,其中包含一个名为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
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
未设置 Database_User 变量。默认为空白字符串。
acr*_*ran 29
environment为了做到这一点,正确理解和env_file属性与文件之间的差异非常重要.env:
environment并env_file让您指定要在容器中设置的环境变量:
environment中显式指定变量docker-compose.ymlenv_file隐式导入该文件中的所有变量.env文件被加载到其可以使用的
docker-compose 环境中docker-composedocker-compose相应CLI 环境变量的行为docker-compose.yml因此,您当前的配置并没有达到您可能认为的效果:
env_file: project/myproject/.env
Run Code Online (Sandbox Code Playgroud)
将该文件加载到容器的.env环境中,而不是. 因此不会设置变量替换:docker-composeDatabase_User
environment:
- POSTGRES_USER=${Database_User}
Run Code Online (Sandbox Code Playgroud)
这里的解决方案:env_file从您的文件中删除docker-compose.yml并放置.env在您开始的同一目录中docker-compose。或者,您可以使用标志通过路径指定.env--env-file文件:
docker-compose --env-file project/myproject/.env up
Run Code Online (Sandbox Code Playgroud)
编辑: 这个答案清楚地解释了在 env 文件中定义环境变量与在 docker-compose 文件中使用变量替换的重要区别。为了清楚起见,我编辑了我的答案,但请确保您也理解其他答案。
您可能尚未设置环境变量Database_User以使变量替换起作用,并且需要在运行 docker-compose 之前在定义的任何位置进行查找。
source ./database_user_defined_here.env
docker-compose up
Run Code Online (Sandbox Code Playgroud)
您可以查看有关环境变量替换的文档:https://docs.docker.com/compose/environment-variables/#substitute-environment-variables-in-compose-files
如果您使用环境文件,则不必指定该environment部分(然后只需POSTGRES_USER=...在该文件中定义)。然后你会运行:
docker-compose --env-file ./your-env-file.env up
Run Code Online (Sandbox Code Playgroud)
或者您也可以在 docker-compose.yml 中指定 env 文件:
database:
...
env_file:
- your-env-file.env
Run Code Online (Sandbox Code Playgroud)
但是,您必须在此文件中显式指定环境变量。这些文档介绍了 env 文件语法。
| 归档时间: |
|
| 查看次数: |
19396 次 |
| 最近记录: |