连接被拒绝 postgres docker
Posted
技术标签:
【中文标题】连接被拒绝 postgres docker【英文标题】:connection refused postgres docker 【发布时间】:2018-07-03 12:26:50 【问题描述】:我用 spring-boot,spring jpa 数据创建了一个小应用程序,它连接到一个 dockerized postgres instace,它工作得很好,即使我尝试通过连接 'psql' 到 dockerized postgres instace 它运行良好。问题是当我尝试将我的 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 新手,我没有找到任何解决问题的方法,我正在使用 unix 容器在 Windows 10 上运行 docker。
谢谢大家。
【问题讨论】:
【参考方案1】:这可行,但我只想强调 Vivek 的观点,即“postgres”来自容器名称,而不是用户 ID 或数据库类型。我使用的是 Docker Compose,所以这个名字来自我的 docker-compose.yml 文件。
【讨论】:
【参考方案2】:改变 -
spring.datasource.url=jdbc:postgresql://localhost:5555/postgres
到
spring.datasource.url=jdbc:postgresql://postgres:5555/postgres
由于您使用链接--link mypgcontainerwithpwd:postgres
启动客户端容器,这意味着您的客户端将能够使用别名postgres
访问您的mypgcontainerwithpwd
容器。 localhost
表示您的客户端容器本身,而不是 mypgcontainerwithpwd
。
【讨论】:
【参考方案3】:在您的属性文件中,您声明 postgres 与您的 Spring Boot 应用程序 (localhost) 在同一个容器中运行,这是不正确的,因为它在不同的容器中运行。
用这个替换你的财产:
spring.datasource.url=jdbc:postgresql://postgres:5555/postgres
您也可以指向 docker bridge ip,通常是 172.17.0.1。
【讨论】:
谢谢,它可以将“localhost”更改为 172.17.0.1,但不能使用“postgres”进行更改。 docker 是否会手动更改主机文件以将 172.17.0.1 解析为“postgres”?无论如何,非常感谢。以上是关于连接被拒绝 postgres docker的主要内容,如果未能解决你的问题,请参考以下文章
Docker- django 在连接到 postgres 时抛出错误:psycopg2.OperationalError:无法连接到服务器:连接被拒绝