瞎捣鼓
最近有在实验室服务器的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即可。