我在主机上运行 PostgreSQL。docker 容器内的应用程序应该能够与数据库通信。由于 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,通过 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