You need to enable JavaScript to run this app. 如何从本地Java环境访问远程主机Docker容器内的Postgres数据库
优惠活动
大模型
产品
解决方案
定价
更多

如何从本地Java环境访问远程主机Docker容器内的Postgres数据库

本地Java访问远程Docker部署Postgres数据库实现方案

步骤1:确认Docker容器端口映射配置

首先确保你docker-compose.yml中postgres服务已经配置了端口映射,将容器默认5432端口暴露到远程宿主机的端口:

services:
  postgres:
    image: postgres:latest
    ports:
      - "5432:5432" # 前者是宿主机端口,后者是容器内端口,宿主机端口可自定义修改
    environment:
      POSTGRES_USER: your_username
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: your_database_name

你当前的配置参考:
docker-compose配置截图
配置修改后需要执行docker-compose up -d重启容器生效。

步骤2:放开远程主机访问限制

  • 若远程主机是云服务器,需到对应云平台安全组规则中,放开上述配置的宿主机端口(如5432)的入站访问权限
  • 若远程主机开启了系统防火墙,需添加端口放行规则:
    以CentOS为例执行命令:firewall-cmd --add-port=5432/tcp --permanent && firewall-cmd --reload
    以Ubuntu为例执行命令:ufw allow 5432/tcp

步骤3:确认Postgres访问权限配置

官方Postgres Docker镜像默认已配置listen_addresses = '*'且允许密码登录,如果你是自定义镜像,需要确认:

  • 容器内/var/lib/postgresql/data/pg_hba.conf中添加了允许外部IP访问的规则
  • postgresql.conf中listen_addresses配置为'*'
    修改配置后需重启Postgres容器生效。

步骤4:本地Java项目配置访问

4.1 导入JDBC驱动

如果是Maven项目,在pom.xml中添加依赖:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.6.0</version> <!-- 可根据你的Postgres版本选择对应驱动版本 -->
</dependency>

4.2 编写数据库连接代码

JDBC连接示例如下:

import java.sql.Connection;
import java.sql.DriverManager;

public class PostgresTest {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://<远程主机公网IP>:<宿主机映射端口>/<你配置的数据库名>";
        String user = "你配置的postgres用户名";
        String password = "你配置的postgres密码";
        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            System.out.println("数据库连接成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果是Spring Boot项目,直接在application.yml中添加配置即可:

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://<远程主机公网IP>:<宿主机映射端口>/<你配置的数据库名>
    username: 你配置的postgres用户名
    password: 你配置的postgres密码

常见排错

  • 先在本地执行telnet <远程主机IP> <映射端口>检查端口是否连通,不通则排查端口映射、防火墙、安全组配置
  • 端口连通但提示权限错误,检查Postgres的账号密码、pg_hba.conf配置是否正确

内容的提问来源于stack exchange,提问作者João Miguens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 07:30:03