Запуск docker-compose -f production.yml up в конечном итоге вернет:
postgres_1 | Connection matched pg_hba.conf line 95: "host all all all md5"
django_1 | PostgreSQL is unavailable (sleeping)...
postgres_1 | 2018-03-21 07:48:35.575 UTC [120] FATAL: password authentication failed for user "DbUsErName"
postgres_1 | 2018-03-21 07:48:35.575 UTC [120] DETAIL: Password does not match for user "DbUsErName".
В моем .envs / .production / .postgres мои envs выложены следующим образом:
# PostgreSQL
# ------------------------------------------------------------------------------
POSTGRES_DB=luup
POSTGRES_USER=DbUsErName
POSTGRES_PASSWORD=myVeryYLongPW
Перед указанной выше ошибкой терминал также выводит:
celeryworker_1 | /entrypoint.sh: line 13: POSTGRES_USER: parameter not set
Однако похоже, что он установлен в этом файле в compose / production / django / entrypoint.sh:
set -o errexit
set -o pipefail
set -o nounset
cmd = "$@"
if [ -z "${POSTGRES_USER}" ]; then
# the official postgres image uses 'postgres' as default user if not set explictly.
export POSTGRES_USER=postgres
fi
export DATABASE_URL = "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}"
Я не касался многих конфигураций postgres с тех пор, как начал проект, так как это попытка запустить его только на Heroku. Так что я не вдавался в psql.
Что мне нужно сделать, чтобы это заработало?
Пожалуйста, дайте мне знать, если потребуется дополнительная информация.
Редактировать - production.yml:
version: '2'
volumes:
postgres_data: {}
postgres_backup: {}
caddy: {}
services:
django: &django
build:
context: .
dockerfile: ./compose/production/django/Dockerfile
depends_on:
- postgres
- redis
env_file:
- ./.envs/.production/.django
- ./.envs/.production/.postgres
- ./.envs/.production/.celery
command: /gunicorn.sh
postgres:
build:
context: .
dockerfile: ./compose/production/postgres/Dockerfile
volumes:
- postgres_data:/var/lib/postgresql/data
- postgres_backup:/backups
env_file:
- ./.envs/.production/.postgres
caddy:
build:
context: .
dockerfile: ./compose/production/caddy/Dockerfile
depends_on:
- django
volumes:
- caddy:/root/.caddy
env_file:
- ./.envs/.production/.caddy
ports:
- "0.0.0.0:80:80"
- "0.0.0.0:443:443"
redis:
image: redis:3.0
celeryworker:
<<: *django
depends_on:
- postgres
- redis
env_file:
- ./.envs/.production/.celery
command: /start-celeryworker.sh
celerybeat:
<<: *django
depends_on:
- postgres
- redis
env_file:
- ./.envs/.production/.celery
command: /start-celerybeat.sh
@Quba добавлен сейчас
Вы запускали свои postgres раньше с разными учетными данными (например, dev env). Если это так, возможно, что postgres создает пользователя только при первом запуске, а затем он не проверяет, изменились ли переменные env. Если да, то можно попробовать пересобрать postgres?
@Quba на самом деле, я не уверен, что у меня есть. Когда я пытаюсь запустить docker-compose -f local.yml run postgres psql, мне возвращается: psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?. Насколько я понимаю, это означает, что он не был построен? Как бы я построил его в Docker?
В папке compose / production / postgres есть Dockerfile. Я не уверен, означает ли это, что он уже построен.
попробуйте: docker-compose stop postgresdocker-compose rm postgresdocker-compose -f production.yml up
@Quba ах, это помогло. Очень признателен!
опубликует ответ, так как его легче найти, если кто-то будет его искать. Если это сработает, вы можете отметить это как принятый ответ.





Контейнер Postgres создает пользователя из переменных env при первом запуске. Поэтому, чтобы иметь новые значения (имя пользователя и пароль для производства), вам, вероятно, придется его перестроить.
docker-compose stop postgresdocker-compose rm postgresdocker-compose -f production.yml upЕсть ли способ избежать необходимости делать это каждый раз, когда я "перезаряжаюсь"?
Можете ли вы показать свой файл production.yml?