Docker compose更改默认环境变量文件
在docker-compose.yml中,我试图将包含环境变量的文件更改为.env.local文件,但没有任何效果。这些值仍然是.env文件中的值。我正在关注这个文件: 这是我的docker-compose.yml文件:Docker compose更改默认环境变量文件,docker,docker-compose,Docker,Docker Compose,在docker-compose.yml中,我试图将包含环境变量的文件更改为.env.local文件,但没有任何效果。这些值仍然是.env文件中的值。我正在关注这个文件: 这是我的docker-compose.yml文件: version: '3' services: mysqldb: image: mysql:5.7 container_name: project_mysql volumes: - mysql:/var
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更改为.env.local.env,但没有发生任何新情况。我还使用
docker kill $(docker ps -q)
docker_clean_ps
docker rmi $(docker images -a -q)
但问题仍然存在。并且没有错误消息或代码
我不知道出了什么问题。有人能帮我吗?根据@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\u数据库和MYSQL\u ROOT\u密码项,因为根据文档,这些项优先于自定义env\u文件中定义的项。TL;DR:您有一个优先级问题。不要重新定义变量 使用
环境
键从.env.local
报告说: 在
环境
部分中声明的环境变量覆盖这些值–即使这些值为空或未定义,也适用
问题是
请注意,使用
env_file
键将设置该文件中的所有变量,而使用environment
键可以更好地控制要设置的变量。我也尝试了.env.local.env。但是我没有任何错误我的意思是去掉.env
前缀。只使用local.env
,前面不要使用.env
。还可以尝试使用前面的/
使用相对路径:/local.env
我更新了我的问题。我尝试了你的建议,但问题仍然存在。我根据@Mickeelb的答案更新了我的建议。正如他所说,您根本不应该在环境下定义它们。如果我理解正确,我应该在compose文件中定义这些变量?由于这些文件是版本连接的,这不是一个安全问题吗?不,您可以将它们放在.env.local
中,但不能使用环境
键在撰写文件中重新定义它们,因为它优先于.env.local
文件,并且文件会覆盖这些值。
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