在docker-compose.yml中,我试图将包含环境变量的文件更改为.env.local文件,但没有任何效果。这些值仍然是.env文件中的值。我正在关注此文档:https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option 这是我的docker-compose.yml文件:
version: '3'
services:
mysqldb:
image: mysql:5.7
container_name: project_mysql
volumes:
- mysql:/var/lib/mysql
env_file:
- .env.local
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
TZ: "Europe/Berlin"
ports:
- "3306:3306/tcp"
我还尝试将名称从文件更改为.env.local.env,.local.env或.variables.env,但没有发生任何新变化。我还使用
清除了缓存docker kill $(docker ps -q)
docker_clean_ps
docker rmi $(docker images -a -q)
但是问题仍然存在。而且没有错误消息或代码
我不知道怎么了。有人可以帮我吗?
答案 0 :(得分:3)
TL; DR::您遇到优先级的问题。不要重新定义变量
使用.env.local
键从environment
中退出。
在environment
部分中声明的环境变量覆盖-即使这些值为空或未定义,也适用
priority for precedence with the .env
是
- 撰写文件
- Shell环境变量
- 环境文件
- Dockerfile
- 未定义变量
env_file:
- .env.local
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE} # Takes precedence over .env.local
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} # Takes precedence over .env.local
TZ: "Europe/Berlin" # Takes precedence over .env.local
请注意,使用env_file
键将设置该文件中的 all 个变量,而使用environment
键则可以控制要设置的变量。
答案 1 :(得分:1)
基于@Michael B提供的答案。我正在提供查询的经过修改的撰写文件:
version: '3'
services:
mysqldb:
image: mysql:5.7
container_name: project_mysql
volumes:
- mysql:/var/lib/mysql
env_file:
- ./local.env
environment:
TZ: "Europe/Berlin"
ports:
- "3306:3306/tcp"
请注意,从环境字典中删除了 MYSQL_DATABASE 和 MYSQL_ROOT_PASSWORD 条目,因为基于文档,这些条目将优先于自定义env_file中定义的条目