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

Я использую конвейер Bitbucket с Posgre SQL для 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 не было изменений, которые могли быть причиной такой ошибки ..

Ответы [ 3 ]

17 голосов
/ 17 февраля 2020

Похоже, причина в docker обновлениях изображения (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
4 голосов
/ 22 февраля 2020

Это очень недавнее изменение, примерно за неделю go. Один из способов избежать этого - жестко закодировать вашу версию 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

1 голос
/ 18 февраля 2020

Если у вас возникли проблемы с подключением Django к PostgreSQL через Docker в первый раз, добавьте 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"

...