Помилка 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файлі не було змін, які могли б бути причиною такої помилки.

Відповіді:


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

4

Це зовсім недавня зміна, як приблизно, тиждень тому. Один із способів уникнути цього - це жорсткий код вашої поштової версії до останньої, наприклад, зміна на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/isissue/681


1

Якщо у вас виникли проблеми з підключенням 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 "


якщо це НЕ РЕКОМЕНДОВАНО, навіщо це пропонувати? Попередити, що це не рекомендується, це добре, але також вказати, чому ви це пропонуєте, або забезпечити роботу над цим. Однозначно допоможе. Просто думка.
— ErroCode-112 Мавпа знайдена

Хороша робота над цим - вказати POSTGRES_PASSWORD для суперпользователя. Ви можете використовувати "-e POSTGRES_PASSWORD = пароль", щоб встановити його в "запуск
— докера
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.