Docker compose change файл переменных среды по умолчанию - PullRequest
2 голосов
/ 03 мая 2020

В docker -compose.yml Я пытаюсь изменить файл, содержащий переменные среды, на файл .env.local, но ничего не работает. Значения все еще те из файла .env. Я следую за этим, сделайте c: 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 ]

3 голосов
/ 03 мая 2020

TL; DR: У вас есть проблема приоритет . Не переопределяйте переменные из .env.local с помощью клавиши environment.


Документация по env_file гласит:

Переменные среды объявлено в environment разделе переопределить эти значения - это верно, даже если эти значения пусто или не определено .

Приоритет для приоритета с .env равен

  1. Создать файл
  2. Переменные среды оболочки
  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 будет установлено все переменные из этого файла, тогда как с помощью клавиши environment вы можете больше контролировать, какую переменную вы хотите установить.

1 голос
/ 03 мая 2020

На основании ответа, предоставленного @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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...