Docker compose更改默认环境变量文件

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

在docker-compose.yml中,我试图将包含环境变量的文件更改为.env.local文件,但没有任何效果。这些值仍然是.env文件中的值。我正在关注这个文件: 这是我的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更改为.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


报告说:

环境
部分中声明的环境变量覆盖这些值–即使这些值为空未定义,也适用

问题是

  • 撰写文件
  • Shell环境变量
  • 环境文件
  • Dockerfile
  • 未定义变量


  • 请注意,使用
    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