Не удается подключиться к postgresql «Роль не существует»

#postgresql #docker

#postgresql #docker

Вопрос:

Я пытаюсь подключиться к postgresql из контейнера docker, но получаю следующую ошибку:

 2019-03-02 20:10:45.218 MSK [2777] spectrum_user@spectrum_db FATAL:  password authentication failed for user "spectrum_user"
2019-03-02 20:10:45.218 MSK [2777] spectrum_user@spectrum_db DETAIL:  Role "spectrum_user" does not exist.
    Connection matched pg_hba.conf line 100: "host  all     all     172.17.0.0/16       md5"
  

Похоже, что он успешно подключается, но не проходит проверку подлинности. И я понятия не имею, почему. Я могу подключиться к БД с помощью psql. Эта роль определенно существует.

Я использую Ubuntu 18.04 LTS

У кого-нибудь есть предложения?

ОБНОВЛЕНИЕ: Оказалось, что у меня были запущены две версии postgresql одновременно, и я попытался подключиться к неправильному экземпляру postgresql.

Комментарии:

1. Как размещается postgres? Находится ли она в другом контейнере docker или в системе Linux?

2. Не могли бы вы, пожалуйста, поделиться командой docker?

3. postgresql запущен в основной системе, а не в контейнере. команда docker: запустить docker —name=»spectrum2″ -d —перезапустить, если не-остановлено -v /opt/spectrum2/configuration:/etc/spectrum2/transports -v /opt /spectrum2/data:/var/ lib/spectrum2 spectrum2/spectrum

4. Можете ли вы подключиться к базе данных извне контейнера docker? Вы пробовали подключиться к другому пользователю?

5. Я могу подключиться к своей базе данных с помощью psql вне контейнера. Я попытался создать нового пользователя и сменить владельца базы данных на postgres, но получил тот же результат.

Ответ №1:

Оказалось, что у меня были запущены две версии postgresql одновременно, и я попытался подключиться к неправильному экземпляру postgresql.

Ответ №2:

Вам нужно отредактировать pg_hba.conf.

При моей установке Ubuntu 18.04 это путь:

 /etc/postgresql/10/main/pg_hba.conf
  

Вы можете попробовать:

 sudo vim /etc/postgresql/10/main/pg_hba.conf
  

замените vim выбранным вами текстовым редактором. Если файл не открывается с помощью этой команды (файл, в котором уже есть настройки), вам нужно будет изучить / etc/postgresql, чтобы найти файл pg_hba.conf. Попробуйте:

 find -name pg_hba.conf
  

Как только вы найдете и откроете файл, отредактируйте следующие строки:

Под комментарием # IPv4 local connections:

 host    all             all             172.17.0.1/24           trust
  

Теперь вам нужно отредактировать еще один файл:

 sudo vim /etc/postgresql/10/main/postgresql.conf
  

Измените любую ссылку на listen_addresses на:

 listen_addresses = '*'
  

После сохранения всех вышеуказанных изменений выполните эту команду:

 sudo service postgresql restart
  

Примечание: эта конфигурация небезопасна для производственной среды, и вам потребуется настроить брандмауэр и изменить некоторые из этих параметров, чтобы сделать его безопасным. Это только для разработки.

Теперь, пока вы указываете IP-адрес вашей хост-ОС для вашего postgres URL и пользователь существует в системе, а роль существует в базе данных, вы сможете подключиться к базе данных хоста из контейнера docker. Я также всегда привязываю HTTP-порт, так что это может сыграть свою роль. Мне нужно было бы просмотреть ваш файл docker, чтобы предоставить какую-либо информацию по этому поводу.

Вам также необходимо разрешить порт на вашем брандмауэре:

 sudo ufw allow from 172.17.0.1/24 to any port 5432 
  

Если вы не заботитесь о безопасности и вышеупомянутое все еще не работает, просто откройте порт 5432. Имейте в виду, что открытие порта может быть небезопасным.

Комментарии:

1. Спасибо. Я уже пробовал это. Postgres прослушивает правильный IP-адрес: postgres 29754 postgres 7u IPv4 23513310 0t0 TCP 172.17.0.1: 5433 (ПРОСЛУШИВАНИЕ) Я попытался изменить md5 на trust, но получил ту же ошибку: (

2. @Marzanna Я добавил информацию о том, как настроить ваш брандмауэр. Вероятно, вам следует настроить ее только для IP-адреса вашего контейнера docker, но вышеуказанное будет работать для всех контейнеров docker.

3. Спасибо. Но у меня нет никаких ограничений брандмауэра. Я заметил, что postgresql прослушивал разные порты. 5432 для localhost и 5433 для 172.17.0.1 (WTF!?). В postgresql.conf было значение по умолчанию port=5433. Я изменил ее на 5432 и перезапустил postgresql. Он прослушивал правильный порт. Но мне не удалось подключиться даже с localhost! Я не могу войти под другим именем пользователя, которое работало ранее. Я изменил порт обратно на 5433, но я все еще не могу подключиться. С postgresql определенно что-то не так.

4. запустите, sudo -i затем подключитесь к вашему системному пользователю, например, su username где username — это имя пользователя в postgres и в вашей системе. запустите psql -d databasename оттуда, и вы сможете подключиться и посмотреть, что происходит в postgres.

5. Еще раз спасибо, но я решил эту проблему. Я обновил вопрос.