当我在不同的目录中使用 docker-compose -f 时,不会读取环境文件

jag*_*r91 6 docker docker-compose

我的 Docker.env文件有问题。当我在我的 Docker 文件夹中(我有docker-compose.yml.env文件的地方)时,环境变量可以正常读取.env。但是,当我docker-compose -f ./docker/docker-compose.yml up --build -d在更高级别的目录中运行时,会收到如下警告:

The MYSQL_ROOT_PASSWORD variable is not set. Defaulting to a blank string. 
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题?我尝试设置env_file属性docker-compose.yml并使用其他文件编码(我在 Google 中找到了这个解决方案),但仍然没有。

这是我的配置:

version: '2'

services:
    mysql:
        container_name: mysql
        image: mysql
        volumes:
            - "./.data/db:/var/lib/mysql"
        environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

.env 文件:

# MySQL
MYSQL_ROOT_PASSWORD=test
MYSQL_DATABASE=test
MYSQL_USER=test
MYSQL_PASSWORD=test
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 2

正如 Tagc 所说,这是 docker-compose 与文件的记录行为.env,它必须位于您运行的目录中docker-compose。您不能用于env_file此目的,因为这是设置不同的环境。该.env文件设置用于解析 yml 文件的环境docker-compose(因此无法从文件内部设置,这将是循环依赖),同时将env_file环境变量注入正在运行的容器中。

如果由于某种原因无法 cd 进入该文件夹或移动 .env 文件,您可以使用以下命令手动获取该文件:

env $(cat docker/.env | grep -v ^# | xargs) \
  docker-compose -f docker/docker-compose.yml up --build -d
Run Code Online (Sandbox Code Playgroud)