我尝试过的方法

我尝试过的方法

我在主机上运行 PostgreSQL。docker 容器内的应用程序应该能够与数据库通信。由于 postgres 默认只监听本地主机上的连接,因此我listen_addresses通过在网络接口上添加机器的 IP docker0172.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,通过 apt 安装的 PostgreSQL,Docker 版本 19.03.5,构建号 633a0ea838)

我尝试过的方法

我怀疑docker服务或网络必须在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 = '*',但由于服务器直接连接到互联网,所以我想避免这样做。

答案1

除了覆盖之外,还要postgresql.service覆盖。[email protected]

例如然后添加:systemctl edit [email protected]

[Unit]
After=docker.service 

相关内容