PostgreSQL не может привязаться к ip докера при загрузке (не удается назначить запрошенный адрес)

Я запускаю PostgreSQL на хост-машине. Приложение внутри контейнера докеров должно иметь возможность взаимодействовать с базой данных. Поскольку postgres по умолчанию прослушивает только соединения на локальном хосте, я изменил 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 = '*' , но поскольку сервер напрямую подключен к Интернету, я бы хотел избежать этого.

0
задан 10 December 2019 в 01:45
1 ответ

В дополнение к переопределению postgresql.service, переопределите postgresql@10-main.service.

Например, с помощью systemctl edit postgresql@10-main.serviceзатем добавить:

[Unit]
After=docker.service 
0
ответ дан 29 January 2021 в 09:08

Теги

Похожие вопросы