我用spring-boot,spring jpa数据创建了一个小应用程序,连接到一个dockerized postgres instace并且它工作得非常好,即使我尝试通过连接 ' PSQL'到了码头化的postgres instace它运作良好。问题是,当我尝试将我的spring-boot应用程序的图像实例停靠时,我尝试将其与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。
感谢所有人。
答案 0 :(得分:2)
在您的属性文件中,您声明postgres与Spring Boot应用程序(localhost)在同一个容器中运行,但由于它在不同的容器中运行,因此不正确。
用此替换你的财产:
spring.datasource.url=jdbc:postgresql://postgres:5555/postgres
你也可以指向docker bridge ip,它通常是172.17.0.1。
答案 1 :(得分:1)
改变 -
spring.datasource.url=jdbc:postgresql://localhost:5555/postgres
TO
spring.datasource.url=jdbc:postgresql://postgres:5555/postgres
由于您使用链接--link mypgcontainerwithpwd:postgres
启动了客户端容器,这意味着您的客户端将能够使用别名mypgcontainerwithpwd
访问您的postgres
容器。 localhost
表示您的客户端容器本身&不是mypgcontainerwithpwd
。
答案 2 :(得分:0)
这可行,但是我只想强调Vivek的观点,即“ postgres”来自容器名称,而不是用户ID或数据库类型。我正在使用Docker Compose,因此该名称来自我的docker-compose.yml文件。