如何使用java.sql.
模块连接到PostgreSQL数据库(在Docker容器内部)?
我已经在运行Postgres并使用pgadmin在此配置下对其进行访问:
version: '3'
services:
teste-postgres-compose:
image: postgres
environment:
POSTGRES_PASSWORD: "Postgres2019!"
ports:
- "15432:5432"
volumes:
- /home/renatogroffe/Desenvolvimento/Docker-Compose/PostgreSQL:/var/lib/postgresql/data
networks:
- postgres-compose-network
teste-pgadmin-compose:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: "admin@admin.com.br"
PGADMIN_DEFAULT_PASSWORD: "PgAdmin2019!"
ports:
- "16543:80"
depends_on:
- teste-postgres-compose
networks:
- postgres-compose-network
networks:
postgres-compose-network:
driver: bridge
但是,如果我尝试通过Java应用程序进行连接,则会收到错误消息:
org.postgresql.util.PSQLException:连接尝试失败。
这是我要呼叫的连接:
try{
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection("jdbc:postgresql://teste-postgres-compose:15432/postgres", "postgres", "Postgres2019!");
} catch(ClassNotFoundException erro1){
throw new RuntimeException(erro1);
} catch (SQLException erro2) {
throw new RuntimeException(erro2);
}
return connection;
答案 0 :(得分:2)
在您的配置中发现2种类型错误
services:
teste-postgres-compose:
image: postgres
environment:
POSTGRES_PASSWORD: "Postgres2019!"
ports:
- "15432:5432"
connection = DriverManager.getConnection("jdbc:postgresql://test-postgres-compose:5432/postgres", "postgres", "Postgres2019!");
teste-postgres-compose
,但是您连接到test-postgres-compose
- "15432:5432"
您已暴露了端口15432
,但已连接到5432
更新:
对不起,我的错。当然,第二个容器是pgadmin,而不是您的应用程序。
teste-postgres-compose
等容器的名称仅在postgres-compose-network
网络中可用,并且同一网络中的其他容器也可以将其用作其他容器。应用程序是在本地启动的(我想您是从IDE启动的Java代码)可能只使用本地主机的公开端口。服务名称在网络外部不可用。
例如,您的postgres必须按地址提供:
localhost:15432
因为您已经在撰写文件中公开了此端口。另外,您也可以尝试环回127.0.0.1
或您的主机IP地址。