Что делать если Docker образ POSTGRES перестал подключаться к базе?

Сконфигурированное тестовое приложение стало прерывать билд на CI во время шага c POSTGRES.

Получаем следующий лог ошибки:

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

Exited with code 1

Чтобы пофиксить эту ошибку, необходимо задать в ENV'ах билда логин/пароль к базе данных. В моем случае я решил использовать не рекомендуемый метод, а именно (авторизация без логина/пароля):

POSTGRES_HOST_AUTH_METHOD=trust

В файле конфига CI (я использовал CircleCI) добавляем ENV следующим образом:
- image: circleci/postgres:9.6
  environment:
    POSTGRES_HOST_AUTH_METHOD: trust

Во время следующего билда все заработает, но будет предупреждение:

****************************************************
WARNING: No password has been set for the database.
         This will allow anyone with access to the
         Postgres port to access your database. In
         Docker's default configuration, this is
         effectively any other container on the same
         system.

         Use "-e POSTGRES_PASSWORD=password" to set
         it in "docker run".
****************************************************

Обратите внимание, что лучшей практикой является защита БД при помощи логина и пароля. Чтобы избавиться ошибки "Error: Database is uninitialized and superuser password is not specified." сконфигурируйте database.yml вашего Ruby on Rails приложения и добавьте соответствующие переменные в файл настроек CI:


database.yml:
test:
  adapter: postgresql
  encoding: unicode
  database: testdatabase
  pool: 5
  username: username
  password: <%= ENV['POSTGRES_TEST_DB_PASSWORD'] %>

конфиг CI:
- image: circleci/postgres:9.6
  environment:
    POSTGRES_USER: username
    POSTGRES_DB: testdatabase
    POSTGRES_PASSWORD: $POSTGRES_TEST_DB_PASSWORD

Значение POSTGRES_TEST_DB_PASSWORD нужно добавить в настройках (через веб интерфейс например) CI.
Наверх