переменные окружения для docker-compose+symfony4+mysql

125
02 августа 2021, 22:10

Не могу понять, как убрать дублирование данных о подключении к базе в .env файле symfony4 проекта.

#.env
DB_NAME=storage
DB_USERNAME=nds
DB_PASSWORD=123456
DATABASE_URL=mysql://nds:123456@storage:3306/storage

Структура каталогов:

app
  vendor
  ...
  .env
docker
  php
  nginx
docker-compose.yml

В docker-compose.yml задаю параметры подключения по ENV-ам:

  mysql:
    image: mysql:8
    container_name: storage
    env_file:
      - ./app/.env
    environment:
      - MYSQL_DATABASE: ${DB_NAME}
      - MYSQL_USER: ${DB_USERNAME}
      - MYSQL_PASSWORD: ${DB_PASSWORD}
Answer 1

если верить документации надо указать файл с определением переменнымых окружения, а не каталог, где его искать. При этом путь к файлу должен быть относительно docker-compose.yml. Следовательно для того, чтобы переиспользовать файл переменных окружения необходимо исправить на следующий вид

  mysql:
    image: mysql:8
    container_name: storage
    env_file:
      - ./app/.env

UPDATE 1: В свете уточнений вопроса можно предложить вариант с использованием переменных окружения в момент использования docker-compose.

Что то вроде этого: В файл ./app/params пишем

export DB_USERNAME=myuser
export DB_PASSWORD=mypassword
export DB_NAME=mydb

docker-compose.yml будет иметь вид:

  app:
    image: app_image:1.2.3
    container_name: application
  environment:
    - MYSQL_DATABASE: ${DB_NAME}
    - MYSQL_USER: ${DB_USERNAME}
    - MYSQL_PASSWORD: ${DB_PASSWORD}
  mysql:
    image: mysql:8
    container_name: storage
  environment:
    - DATABASE_URL: mysql://${DB_USERNAME}:${DB_PASSWORD}@${DB_NAME}:3306/storage
    - MYSQL_DATABASE: ${DB_NAME}
    - MYSQL_USER: ${DB_USERNAME}
    - MYSQL_PASSWORD: ${DB_PASSWORD}

Тогда запуск контейнеров можно написать так:

source ./app/params && docker-compose pull && docker-compose up -d
READ ALSO
Alarm Service не работает на версиях андроид выше 7.1.2

Alarm Service не работает на версиях андроид выше 7.1.2

я пытаюсь сделать так чтобы после закрытия приложения свайпом из списка приложений, появлялись уведомления в заданное времяЯ подправил...

218
Не переносится текст у CheckBox (Programmatically (Android))

Не переносится текст у CheckBox (Programmatically (Android))

При динамическом создании CheckBox, не переносится текстДобавляю следующим образом:

336
Настройка виртуальных хостов Tomcat

Настройка виртуальных хостов Tomcat

Есть имя хоста testmydomain

210
HashMap.merge() через Stream API

HashMap.merge() через Stream API

Есть метод, в котором алгоритм прописан через обычную итерацию по List:

202