簡體   English   中英

Dockerized Spring Boot 應用程序連接到數據庫 docker 映像

[英]Dockerized Spring boot app connect to database docker image

我有一個帶有 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 數據庫是一個 docker 容器,名稱為:“ORA12201_1”和端口 3769
  2. 在 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

春季啟動配置

您現在可以使用host.docker.internal作為主機名從一個連接到另一個,例如在您的 Spring Boot application.properties

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM