我的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.
有没有人遇到过这个问题?我尝试在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}
.env文件:
# MySQL
MYSQL_ROOT_PASSWORD=test
MYSQL_DATABASE=test
MYSQL_USER=test
MYSQL_PASSWORD=test
答案 0 :(得分:1)
正如Tagc所说,这是带有.env
文件的docker-compose的记录行为,它必须位于您运行docker-compose
的目录中。您无法使用env_file
,因为这是设置不同的环境。 .env
文件设置docker-compose
用于解析yml文件的环境(因此无法在文件中设置,这将是循环依赖),而env_file
注入环境变量进入运行容器。
如果由于某种原因无法进入文件夹或移动.env文件,您可以手动使用以下内容来源文件:
env $(cat docker/.env | grep -v ^# | xargs) \
docker-compose -f docker/docker-compose.yml up --build -d
答案 1 :(得分:0)
可能有一个解决方法,但它很麻烦,我什至不确定它在所有条件下都有效。我刚刚从这个文件夹 tree
:
├── compose
│ └── docker-compose.test.yml
├── configs
│ └── .conf
└── envs
└── .env
还有这个 Docker-compose:
services:
testing_container:
image: mongo
container_name: tester
volumes:
- ../configs/.conf:/etc/configs/.conf
environment:
MONGO_PORT: ${MONGO_PORT}
ports:
- "${MONGO_PORT}:27017"
env_file:
- .env
然后我运行它:
docker-compose -f compose/docker-compose.test.yml --project-directory ./envs up -d
在可能的选项中,--project-directory
会覆盖默认工作目录,诱使 docker 在 envs
文件夹中查找 .env
文件,而不是 compose
文件夹。如果您仔细查看前面的 docker-compose.test.yml
,您会立即注意到您也必须适应所有其他路径,例如绑定体积 ../configs/.conf
,它现在相对于 envs
文件夹。
老实说,除非你真的别无选择,否则我不会推荐它。