Docker не получает переменные окружения Postgres - PullRequest
0 голосов
/ 18 февраля 2019

Docker использует переменные из моего файла .env, и я продолжаю получать сообщение об ошибке:

Необработанное отклонение SequelizeConnectionError: роль "eli" не существует

Iхотел бы, чтобы Postgres получил переменные из среды, заданной в docker-compose.yml

.env

POSTGRES_PORT=5432
POSTGRES_DB=elitest4
POSTGRES_USER=eli
POSTGRES_PASSWORD=

docker-compose.yml

# docker-compose.yml
version: "3"
services:
  app:
    build: .
    depends_on:
      - database
    ports:
      - 8000:8000
    environment:
      - POSTGRES_HOST=database
    env_file:
      - .env
  database:
    image: postgres:9.6.8-alpine
    environment: # postgress should be getting these variables, not the variables set in the env file thats for localhost
      POSTGRES_PASSWORD: password
      POSTGRES_USER: user
      POSTGRES_DB: db
    volumes:
      - pgdata:/var/lib/postgresql/pgdata
    ports:
      - 8002:5432
    env_file:
      - .env
  react_client:
      build:
        context: ./client
        dockerfile: Dockerfile
      image: react_client
      working_dir: /home/node/app/client
      volumes:
        - ./:/home/node/app
      ports:
        - 8001:8001
      env_file:
        - ./client/.env
volumes:
  pgdata:

1 Ответ

0 голосов
/ 18 февраля 2019

TL / DR

Попробуйте обновить раздел среды базы данных службы docker-compose следующим образом:

environment:
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
  POSTGRES_USER: ${POSTGRES_USER:-user}
  POSTGRES_DB: ${POSTGRES_DB:-db}

Также обратите внимание, что если вы хотите увидеть, каккаждая связанная переменная в конечном итоге оценивается в Compose, вы можете запустить следующую команду, чтобы увидеть «эффективный» файл compose:

$ docker-compose config

Эта команда выведет на печатькак выглядит ваш составной файл со всей заменой переменных, замененной его оценкой.


См. Переменные окружения в Compose и Подстановка переменных в документации.

Обратите особое внимание на этот раздел:

Когда вы устанавливаете одну и ту же переменную среды в нескольких файлах, вот приоритет, используемый Compose, чтобы выбрать, какое значение использовать:

1. Compose file 
2. Shell environment variables 
3. Environment file Dockerfile
4. Variable is not defined

В приведенном ниже примере мы устанавливаем одну и ту же переменную среды для файла Environment и для файла Compose:

$ cat ./Docker/api/api.env
NODE_ENV=test

$ cat docker-compose.yml 
version: '3' 
services:
api:
  image: 'node:6-alpine'
  env_file:
    - ./Docker/api/api.env
  environment:
    - NODE_ENV=production 

Когда вы запускаете контейнер,переменная среды, определенная в файле Compose, имеет приоритет.

$ docker-compose exec api node
process.env.NODE_ENV 'production'

Наличие любого параметра ARG или ENV в Dockerfile оценивается, только если нет записи Docker Compose для среды или файла env_file.

Особенности для контейнеров NodeJS

Если у вас есть запись package.json для script:start, как NODE_ENV=test node server.js, то это отменяет любые настройки в вашем файле docker-compose.yml.

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