Dockerized Spring启动应用程序连接到数据库docker映像

时间:2020-01-31 12:22:48

标签: spring-boot docker docker-compose

我有一个带有gradle的基本spring boot应用程序,该应用程序可以调用Oracle数据库,并且数据库属性在application.properties文件中指定。

我使用插件“ com.google.cloud.tools.jib”并使用以下命令创建了Spring Boot应用程序的Docker映像:

./gradlew jibDockerBuild --image=app1

我有一个docker-compose文件,其中将映像指定为服务,并且我希望在运行命令“ docker-compose up”时启动应用程序

docker-compose文件如下:

version: '3'
    services:
        app1:
            image: "app1"
            ports:
                - "8731:8731"

但是当我运行CMD中的“ docker-compose up”命令时,我收到以下异常:

 java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection

更多信息:

  1. 我的Oracle数据库是一个名为“ ORA12201_1”和端口3769的docker容器
  2. 在application.properties内部,指定的数据库属性正确,因为我正在从IntelliJ启动应用程序。

1 个答案:

答案 0 :(得分:0)

您可以毫无问题地从IntelliJ连接,因为容器将端口(3769)暴露到主机(您的PC),但是现在您正尝试从一个Docker容器连接到另一个。
容器不共享网络(隔离),因此您需要连接它们。

推荐的方法之一是用户定义的网络

首先创建一个网络

docker network create --driver bridge my_network

运行应用程序

docker run -p 5432:5432 --network my_network -d --name=postgres postgres
docker run -p 5050:80 --network my_network -d --name=pgadmin dpage/pgadmin4

您可以使用以下方法验证它们是否在同一网络上有效运行

docker network inspect my_network

Spring Boot配置

您现在可以使用host.docker.internal作为主机名从另一个连接到另一个,例如在您的Spring Boot应用程序中。

spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/postgres