Docker-compose up не может аутентифицировать пользователя postgres

Запуск 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

Можете ли вы показать свой файл production.yml?

Quba 21.03.2018 09:04

@Quba добавлен сейчас

Jay Jung 21.03.2018 09:07

Вы запускали свои postgres раньше с разными учетными данными (например, dev env). Если это так, возможно, что postgres создает пользователя только при первом запуске, а затем он не проверяет, изменились ли переменные env. Если да, то можно попробовать пересобрать postgres?

Quba 21.03.2018 09:13

@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?

Jay Jung 21.03.2018 09:17

В папке compose / production / postgres есть Dockerfile. Я не уверен, означает ли это, что он уже построен.

Jay Jung 21.03.2018 09:20

попробуйте: docker-compose stop postgresdocker-compose rm postgresdocker-compose -f production.yml up

Quba 21.03.2018 09:34

@Quba ах, это помогло. Очень признателен!

Jay Jung 21.03.2018 09:49

опубликует ответ, так как его легче найти, если кто-то будет его искать. Если это сработает, вы можете отметить это как принятый ответ.

Quba 21.03.2018 09:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
1 481
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Контейнер Postgres создает пользователя из переменных env при первом запуске. Поэтому, чтобы иметь новые значения (имя пользователя и пароль для производства), вам, вероятно, придется его перестроить.

  • docker-compose stop postgres
  • docker-compose rm postgres
  • docker-compose -f production.yml up

Есть ли способ избежать необходимости делать это каждый раз, когда я "перезаряжаюсь"?

Jay Jung 21.03.2018 16:18

Другие вопросы по теме