spring-boot - Dockerized Spring Boot应用程序连接到数据库Docker镜像

标签 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

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

    最佳答案

    您可以毫无问题地从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 application.properties中
    spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/postgres
    

    关于spring-boot - Dockerized Spring Boot应用程序连接到数据库Docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60003840/

    相关文章:

    spring-boot - 向 Eureka 服务器注册服务时出错

    java - 如何在 Spring Security 中创建自定义身份验证过滤器?

    docker - 无法连接 尝试连接到本地对等点时出错 : context deadline exceeded

    Docker(带有 SYSTEMCTL 的 CentOS 7): Failed to mount tmpfs & cgroup

    python - 如何运行带有特定标签 docker-py 的容器

    java - 如何在 Spring 按个人资料启用@Scheduled 作业?

    Spring-boot 使用 schema.sql 和 data.sql 填充 H2 数据库

    docker - docker compose将保留旧卷,现在无法清除它们

    docker - Web 服务器重启后,Windows Server Docker 容器无法连接到代理容器

    docker - 无法使用 docker run 命令将 ubuntu-apache 容器与 ubuntu-php 容器链接