Docker撰写更改默认环境变量文件

时间:2020-05-03 14:32:43

标签: docker docker-compose

在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)

但是问题仍然存在。而且没有错误消息或代码

我不知道怎么了。有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

TL; DR::您遇到优先级的问题。不要重新定义变量 使用.env.local键从environment中退出。


documentation on env_file说:

environment部分中声明的

环境变量覆盖-即使这些值为空未定义,也适用

priority for precedence with the .env

  1. 撰写文件
  2. Shell环境变量
  3. 环境文件
  4. Dockerfile
  5. 未定义变量
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中定义的条目