Ошибка конвейера CI / CD с PostgreSQL с ошибкой «База данных не инициализирована и пароль суперпользователя не указан»

18

Я использую конвейер Bitbucket с PosgreSQL для CI / CD. Согласно этой документации сервис PostgreSQL был описан bitbucket-pipelines.ymlследующим образом:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine

До сих пор все работало нормально. Но все мои последние конвейеры потерпели неудачу со следующей ошибкой:

   Error: Database is uninitialized and superuser password is not specified.
   You must specify POSTGRES_PASSWORD for the superuser. Use
   "-e POSTGRES_PASSWORD=password" to set it in "docker run".

   You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
   without a password. This is *not* recommended. See PostgreSQL
   documentation about "trust":
   https://www.postgresql.org/docs/current/auth-trust.html

Как я могу это исправить? В bitbucket-pipelines.ymlфайле не было изменений, которые могли быть причиной такой ошибки.

neverwalkaloner
источник

Ответы:

17

Похоже, причина в обновлениях образа докера ( проблема с github ). Последние версии не позволяют подключаться к БД без пароля откуда угодно. Поэтому вам нужно указать имя пользователя / пароль:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
         POSTGRES_DB: pipelines
         POSTGRES_USER: test_user
         POSTGRES_PASSWORD: test_user_password

Или, если вы все еще не хотите использовать пароль, вы можете просто установить POSTGRES_HOST_AUTH_METHOD=trustпеременную окружения:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_HOST_AUTH_METHOD: trust
neverwalkaloner
источник
4

Это очень недавнее изменение, примерно неделю назад. Один из способов избежать этого - жестко закодировать вашу версию postgres, чтобы она не была последней, например, изменилась на postgres:9.5.18илиpostgres:9.5.20-alpine

Другой способ - передать поддельный пароль:

services:
  db:
    image: postgres
    ports:
      - "8001:5432"
    environment:
      - POSTGRES_PASSWORD=fake_password

Смотрите обсуждение здесь: https://github.com/docker-library/postgres/issues/681

ehacinom
источник
1

Если у вас возникли проблемы с подключением Django к PostgreSQL через Докер в первый раз, а затем добавьте POSTGRES_HOST_AUTH_METHOD: trustв свой docker-compose.ymlфайл:

db: image: postgres:11 environment: POSTGRES_HOST_AUTH_METHOD: trust

Это решит проблему с подключением для меня.

Также имейте в виду, что «это не рекомендуется. См. Документацию PostgreSQL о« доверии »: https://www.postgresql.org/docs/current/auth-trust.html ».

ADRIAN R7Z
источник
если это НЕ РЕКОМЕНДУЕТСЯ, зачем предлагать это? Хорошее предупреждение о том, что это не рекомендуется, но также и объяснение, почему вы предлагаете это, или предоставление обходного пути. Определенно поможет. Просто мнение.
Обезьяна ErroCode-112 найдена
Хорошая работа для этого - указать POSTGRES_PASSWORD для суперпользователя. Вы можете использовать «-e POSTGRES_PASSWORD = пароль», чтобы установить его в «Docker run»
ADRIAN R7Z