Проблемы с аутентификацией Postgres во время интеграционных тестов с докером - PullRequest
0 голосов
/ 07 января 2019

Проблема при выполнении интеграционных тестов, я получаю эту ошибку:

 error: password authentication failed for user "postgres"
      at Connection.parseE (node_modules/pg/lib/connection.js:567:11)
      at Connection.parseMessage (node_modules/pg/lib/connection.js:391:17)

Это происходит в 100% случаев независимо от того, что находится в файле docker-compose.yml.

Я использую knex, чтобы установить соединение с БД следующим образом:

    function getConnectionForDatabase(database) {
     return {
       host: config.get("database.connection.host"),
       user: config.get("database.connection.user"),
       password: config.get("database.connection.password"),
       database: database
     };
   }

   function getDatabaseConnection(database) {
     return knex({
       client: config.get("database.client"),
       connection: getConnectionForDatabase(database),
       debug: config.get("database.debugMode"),
       pool: {
         min: config.get("database.pool.min"),
         max: config.get("database.pool.max")
       }
     });
   }

getDatabaseConnection("postgres");

host is 127.0.0.1 и допустим, что имя пользователя - postgres, а пароль - postgres

docker-compose.yml содержит:

   postgres:
    image: postgres:9.5.4
    command: postgres -D /var/lib/postgresql/data
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: 'postgres'
      POSTGRES_USER: 'postgres'

и я могу подключиться к postgres db вручную, используя:

docker exec -it <hash> bash
root@<hash>:/# psql -U postgres

ive также обновил пароль для создания файла docker-compose.yml, и он не будет подключаться:

psql -d postgres -c "ALTER USER postgres WITH PASSWORD '<new password>';"

Тем не менее, я запускаю модульный тест ... я получаю то же сообщение об ошибке, как упомянуто выше !!

Что мне не хватает, чтобы получить этот пробег? Любая помощь будет очень ценна!

Спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Попробуйте соединить вашу базу данных с psql postgres://postgres:postgres@localhost:5432/database с вашего хоста. Если это не работает, у вас есть проблема с вашим psql сервером Docker. То, как вы сейчас тестируете ваше соединение, может использовать unix-сокеты для подключения к серверу, поэтому он не проверяет, что ваш сервер принимает соединения через TCP-сокет.

Если TCP-соединение с psql работает нормально, попробуйте распечатать использованные конфигурации knex, чтобы убедиться, что ни один из атрибутов соединения не передал значения undefined. Сначала вы должны попытаться соединиться с жестко заданными параметрами, прежде чем пытаться сделать что-нибудь более сложное.

...