连接被拒绝——Postgres Docker。

3
我用Spring Boot和Spring JPA Data制作了一个小应用程序,连接到了一个dockerized的Postgres实例,它运行得非常好。即使我尝试通过'psql'连接到dockerized的Postgres实例,它也可以正常工作。问题出现在我尝试将Spring Boot应用程序的镜像实例dockerize并尝试将其与dockerized postegres实例链接时。我使用的docker命令是:
docker run -it --link mypgcontainerwithpwd:postgres --name postgresclient1 sprinbootjpa

如我之前所提到的,容器mypgcontainerwithpwd正在运行,可以通过本地应用程序或通过psql访问。

psql -p 5555 postgres postgres

在jar包中,我将执行类似于以下的application.properties文件

spring.datasource.url=jdbc:postgresql://localhost:5555/postgres
spring.datasource.username=postgres
spring.datasource.password=password
spring.jpa.generate-ddl=true

在启动阶段,会出现一个异常,打印如下信息:connection refused localhost-> 5555

构建实例的dockerfile如下:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD ./SpringJPA-PostgreSQ-0.0.1.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

我是docker的新手,对于这个问题我没有找到任何解决方法。我在windows 10上运行unix容器。

感谢大家。

3个回答

7

在您的属性文件中,您声明PostgreSQL在与Spring Boot应用程序(localhost)相同的容器中运行,但实际上它是在不同的容器中运行。

请使用以下属性替换您的属性:

spring.datasource.url=jdbc:postgresql://postgres:5555/postgres

您还可以指向 Docker 桥接 IP,通常为 172.17.0.1。


谢谢,将'localhost'更改为172.17.0.1确实起作用了,但将其更改为'postgres'却没有。也许是Docker手动更改了主机文件以将172.17.0.1解析为'postgres'吧? 不管怎样,非常感谢。 - federico

2

修改 -

spring.datasource.url=jdbc:postgresql://localhost:5555/postgres

spring.datasource.url=jdbc:postgresql://postgres:5555/postgres

由于您使用链接 --link mypgcontainerwithpwd:postgres 启动了客户端容器,这意味着您的客户端将能够使用别名 postgres 访问您的 mypgcontainerwithpwd 容器。而 localhost 意味着您的客户端容器本身,而不是 mypgcontainerwithpwd


1
这个可以运行,但我想强调Vivek的观点:“postgres”来自容器名称,而不是用户ID或数据库类型。我正在使用Docker Compose,所以这个名称来自我的docker-compose.yml文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接