在 docker-compose.yml
文件中,env_file
属性用于指定一个或多个环境变量文件,这些文件中的变量将会被加载到容器的环境中,供容器内的应用程序使用。env_file
文件通常是一个简单的文本文件,包含键值对格式的环境变量定义(如 .env
文件)。
env_file 语法
常见用法
1. 使用 .env
文件
env_file
可以指定一个或多个 .env
文件,文件中的变量会自动加载到容器的环境中。
2. 指定多个 env_file
文件
你可以指定多个环境变量文件,Docker Compose 会按照顺序加载它们并覆盖重复的变量。
3. 使用相对路径和绝对路径
你也可以指定环境变量文件的相对路径或绝对路径,来加载不同位置的 .env
文件。
4. 在 .env
文件中定义变量
.env
文件通常包含一系列键值对,格式如下:
.env 文件示例:
这些变量会自动加载到容器的环境中,你可以在容器中通过 process.env
(Node.js)或其他语言的环境变量方式访问它们。
env_file 和 environment 的区别
env_file
: 从指定的文件加载环境变量(可以包含多个文件),并将变量导入容器。environment
: 可以直接在docker-compose.yml
中定义环境变量。与env_file
不同,environment
是直接定义在docker-compose.yml
文件中的变量,而不是从外部文件加载。
示例:
你可以使用 env_file
来加载 .env
文件,也可以直接使用 environment
来在 docker-compose.yml
文件中定义环境变量。
环境变量的优先级
当同时使用 env_file
和 environment
时,environment
中定义的变量优先于 env_file
中的变量。如果两个地方都有相同的环境变量,environment
中的值会覆盖 env_file
中的值。
问题排查
- 容器没有读取到环境变量:
如果容器没有加载环境变量,确保
.env
文件位于docker-compose.yml
同一目录下,且文件格式正确。.env
文件中的每一行都应该是KEY=VALUE
格式,不能有额外的空格或其他字符。- 使用
docker-compose exec <service_name> env
检查容器中是否正确加载了环境变量。
总结
env_file
用于加载外部环境变量文件(如.env
文件)。- 可以指定多个环境文件,Docker Compose 会按顺序加载它们。
- 使用
env_file
时,Docker Compose 会将文件中的变量加载到容器中,而environment
用于直接在docker-compose.yml
中定义变量。 environment
中的变量优先于env_file
中的变量。
通过 env_file
和 environment
配合使用,可以灵活地管理和配置容器的环境变量