我必须使用Spring Boot编写3个简单的微服务,并对其进行dockerize。自从我开始阅读有关docker的文章以来,我遇到了几个问题。
要构建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>
要求
我的问题
我有测试服务.jar,并且一切正常(它可以连接到dockerized postgres),但是当我运行测试服务.jar的docker image(使用sudo mvn docker:build构建)时,我无法连接到postgres。 / p>
我发现数据源中的本地主机可能是问题所在
spring.datasource.url=jdbc:postgresql://localhost:5432/dockertest
但是我不知道应该用什么代替本地主机。
我希望您能轻松创建和运行这些docker映像(满足上述要求)的所有提示
答案 0 :(得分:1)
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