Что делать если 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.