首页 > 解决方案 > 如何将 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>

要求

我的问题

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

我发现数据源中的 localhost 可能是问题所在:

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

但我不知道应该用什么代替 localhost。


我将不胜感激有关如何轻松创建和运行这些 docker 映像的任何提示(满足上述要求)

标签: springpostgresqlmavendockermicroservices

解决方案


Docker 不会看到你的本地主机。您必须创建一个网络,并加入所有服务(请参阅docker networkcli 命令)然后使用应用程序的 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


推荐阅读