Postgres не будет прослушивать IP-адрес хоста Docker после перезагрузки, пока Postgres не будет перезапущен - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть новый Debian 9 с Docker 18.09 (установлен из официального репозитория Docker) и Postgres 9.6.Я отредактировал /etc/postgresql/9.6/main/postgresql.conf, чтобы установить параметр listen_addresses:

listen_addresses = '127.0.0.1,172.17.0.1'

После внесения этого изменения и перезапуска Postgres мои контейнеры Docker могут без проблем подключаться к Postgres на 172.17.0.1.Проблема возникает, когда я перезагружаю всю ОС, Postgres не будет слушать 172.17.0.1, пока я сам не перезапущу Postgres.Я поменял порядок адресов в postgresql.conf безрезультатно, запустив show listen_addresses; в psql , говорит, что прослушивает оба указанных мной порта, но sudo netstat -na показывает, что прослушиваеттолько в 127.0.0.1:

$ sudo netstat -na
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

Перезапуск Postgres (systemctl restart postgres), и теперь он также прослушивает 172.17.0.1:

$ sudo netstat -na
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN
tcp        0      0 172.17.0.1:5432         0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

Это означает, что мои Docker контейнерыпри запуске, которые подключаются к Postgres, они не запускаются автоматически, поскольку получают ошибку «Отказано в соединении».

1 Ответ

0 голосов
/ 16 декабря 2018

Проведя кучу дополнительных тестов, я понял, что, похоже, проблема с запуском Docker и Postgres, я предполагаю, что что-то вроде интерфейса Docker не появляется до тех пор, пока сам Docker не запустится, или что-то подобное, и, следовательно, Postgresне могу слушать это, потому что это еще не существует.Я скопировал /lib/systemd/system/postgresql@.service (да, с @) в /etc/systemd/system/ и в разделе [Unit] установил его запуск только после Запуск Docker:

[Unit]
...
After=docker.service

Затем настроил мои пользовательские модули, которые запускают контейнеры Docker для запуска только после Postgres (а не Docker, поскольку Postgres не будет запускаться до окончания Docker):

[Unit]
...
Wants=postgresql.service

И теперь все работает, как и ожидалось!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...