如何将dockerized的spring boot应用程序连接到dockerized的postgres

时间:2019-06-24 18:58:43

标签: spring postgresql maven docker microservices

我必须使用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>

要求

  • Docker容器必须在没有ROOT用户特权的情况下运行。
  • 构建maven脚本应构建docker容器。
  • 还需要对数据库进行docker化(所有微服务都使用一个数据库)

我的问题

我有测试服务.jar,并且一切正常(它可以连接到dockerized postgres),但是当我运行测试服务.jar的docker image(使用sudo mvn docker:build构建)时,我无法连接到postgres。 / p>

我发现数据源中的本地主机可能是问题所在

spring.datasource.url=jdbc:postgresql://localhost:5432/dockertest

但是我不知道应该用什么代替本地主机。


我希望您能轻松创建和运行这些docker映像(满足上述要求)的所有提示

1 个答案:

答案 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