#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. Еще раз спасибо, но я решил эту проблему. Я обновил вопрос.