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
.