0%

局域网访问服务器Docker下psql数据库的若干问题

瞎捣鼓

最近有在实验室服务器的docker上部署服务的需求,将数据注入psql数据库并在docker环境中访问一切正常,然而在局域网下其他设备访问数据时,出现了一些问题,遂简单记录。

首先,由于postgresql数据库的默认端口为5432,然而docker仅仅预留了几个映射端口与外部通信,因此,需要修改psql的运行端口,这里我选择的映射端口为25002:2002。在 Docker 中,端口映射的格式通常是 host_port:container_port,即 宿主机端口:容器内端口。因此,首先需要修改psql的运行端口为2002。

找到/etc/postgresql/14/main/postgresql.conf配置文件,将port = 5432修改为制定端口,我这里为2002。

并添加:listen_addresses = '*'开启远程访问。

随后修改/etc/postgresql/14/main/pg_hba.conf来设置放行ip。设置规则为在实验室局域网下的ip全部放行,那么添加规则:

1
host    all             all             192.168.41.0/24          md5

最后,重启服务:

1
sudo /etc/init.d/postgresql restart

那么通过局域网下其他设备访问服务器的25002端口即可访问数据库:

1
psql -h 192.168.41.56 -p 25002 -U postgres -d shanghaipoidb

尝试在命令行中远程连接,并未发生什么问题,但在pgadmin中连接却提示错误为一个172.x.x.x的ip被拒绝访问,如果出现这种情况,意味着 Docker 容器内的 PostgreSQL 服务绑定的是容器的内部网络 IP(例如 172.x.x.x),而不是宿主机的 IP 地址(例如 192.x.x.x)。当你使用 pgAdmin 连接时,pgAdmin 可能尝试直接连接容器的内部 IP 地址,而不是宿主机的地址,因此连接被拒绝。只需将改ip使用上面相同的方式加入放行ip即可。