Я запускаю PostgreSQL на хост-машине. Приложение внутри контейнера докеров должно иметь возможность взаимодействовать с базой данных. Поскольку postgres по умолчанию прослушивает только соединения на localhost, я изменил listen_addresses
добавив IP-адрес машины в docker0
сетевой интерфейс, 172.17.0.1:
postgresql.conf
:
[...]
listen_addresses = '127.0.0.1,172.17.0.1'
[...]
Изменение postgresql.conf и перезапуск базы данных работают нормально, он делает то, что должен. Однако, когда я перезагружаю машину, я вижу, что postgres не может привязаться к интерфейсу:
postgresql-10-main.log
:
2019-12-09 23:03:10.202 UTC [935] LOG: listening on IPv4 address "127.0.0.1", port 5432
2019-12-09 23:03:10.218 UTC [935] LOG: could not bind IPv4 address "172.17.0.1": Cannot assign requested address
2019-12-09 23:03:10.218 UTC [935] HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2019-12-09 23:03:10.218 UTC [935] WARNING: could not create listen socket for "172.17.0.1"
[...]
Опять же, перезапуск postgres работает нормально, но я бы не хотел перезапускать базу данных вручную после перезагрузки системы.
(Ubuntu 18.04, PostgreSQL установлен через apt, Docker версии 19.03.5, сборка 633a0ea838)
Я подозревал, что служба докеров или сеть должны запускаться до postgres, поэтому я попытался добавить файл systemd, но он не работает
/etc/systemd/system/postgresql.service.d/override.conf
:
[Unit]
After=docker.service
After=network.target
Require=docker.service
Require=network.target
Все руководства, которые я могу найти, предлагают настройку listen_addresses = '*'
, но поскольку сервер напрямую подключен к Интернету, я бы хотел этого избежать.