spring - 如何将 dockerized spring boot 应用程序连接到 dockerized postgres
问题描述
我必须使用 spring boot 编写 3 个简单的微服务,并将它们 dockerize。自从我刚刚开始阅读有关码头工人的信息以来,我遇到了几个问题。
要构建 docker 图像,我正在使用这个 maven 插件:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<imageName>example</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
</configuration>
</plugin>
要求
- Docker 容器必须在没有 ROOT 用户权限的情况下运行。
- 构建 maven 脚本应该构建 docker 容器。
- 数据库也需要docker化(所有微服务使用一个数据库)
我的问题
我有测试服务 .jar 并且一切正常(它连接到 dockerized postgres)但是当我运行测试服务 .jar 的 docker 映像(使用 sudo mvn docker:build 构建)时,我无法连接到 postgres。
我发现数据源中的 localhost 可能是问题所在:
spring.datasource.url=jdbc:postgresql://localhost:5432/dockertest
但我不知道应该用什么代替 localhost。
我将不胜感激有关如何轻松创建和运行这些 docker 映像的任何提示(满足上述要求)
解决方案
Docker 不会看到你的本地主机。您必须创建一个网络,并加入所有服务(请参阅docker network
cli 命令)然后使用应用程序的 docker 名称在网络中引用它(如果名称是 abc-service 然后使用spring.datasource.url=jdbc:postgresql://abc-service/dockertest
)。
或者您可以使用docker compose,它会自动为您的服务创建网络。
例如 docker-compose.yml:
version: '3'
services:
redis-server:
image: 'redis'
eureka-server:
build: ./eureka-server
ports:
- "8010:8010"
book-service:
build: ./book-service
build: ./writer-service
然后在适当的服务的 application.yml 中像这样连接:
redis:
host: redis-server
port: 6379
推荐阅读
- c# - AudioClip.SetData(samples,0) 无法从 Unity 中的 json 文件加载样本数据
- python - 在目录的每个子文件夹中创建一个文件夹?
- javascript - 循环中的Javascript增量
- powershell - 如何使用 Powershell 脚本映射到网络驱动器
- javascript - 滚动设置数量的像素后,jQuery会触发一个函数
- spring - 使用 javax.ws.rs.PathParam 和 Docker Swarm 在 URI 中出现 @PathParam 的奇怪行为
- javascript - 如何在 IE 和 Chrome 中重放动画 gif
- excel - 将工作表复制到新工作簿时删除宏
- css - Odoo 10:如何增加字段宽度?
- angularjs - Flot legendFormatter 不适用于 ng-click