这个问题涉及到 Docker Compose 的环境变量配置。在您的 docker-compose.yml
文件中,env_file
和 environment
这两个关键字都用于指定环境变量。
env_file
是用来指定外部环境变量文件的路径(在此例中,为 .dev.env
)。这个文件应该包含一系列的键值对,比如:
MY_NAME=John
而 environment
是 Docker Compose 服务内部设置环境变量的方式,它直接在 docker-compose.yml
文件中为服务指定键值对。
然而,您在使用 env_file
时遇到了问题。事实上,env_file
不应该在 environment
下面。相反,它应该在服务的根下面,就像这样:
services:
node:
image: node
env_file:
- .dev.env
这样,Docker Compose 就会在启动服务时读取 .dev.env
文件并设置环境变量。
另外,请注意,环境变量文件(.env
或 .env.local
等)通常在项目的根目录下,而不是在 docker-compose.yml
文件所在的目录。确保 .dev.env
文件在正确的位置,并包含您想要注入的环境变量。
如果您按照上述方式修改您的 docker-compose.yml
文件和环境变量文件的位置,应该就能正确地读取到环境变量了。
environment 比 env_file 优先级高,指定同名环境变量之后就覆盖掉了。
environment 里的 ${MY_NAME} 是用不到 env_file 里的内容的,services 的 env_file 指定的container 里的环境变量,不是 docker-compose.yml 的变量。