目錄
問題內容
解決方法
首頁 Java Docker Compose + Spring Boot + Postgres 連接

Docker Compose + Spring Boot + Postgres 連接

Feb 11, 2024 pm 03:39 PM
java應用程式

php小編西瓜今天為大家帶來一篇關於如何使用Docker Compose連接Spring Boot和Postgres的教學。 Docker Compose是用來定義和執行多容器Docker應用程式的工具,而Spring Boot則是用來建立Java應用程式的框架,Postgres則是一個功能強大的關聯式資料庫。透過結合這三者,我們可以輕鬆地建立一個包含Spring Boot應用程式和Postgres資料庫的開發環境。本教學將帶你一步步學習如何配置和連接這三者,讓你能夠快速開始開發你的應用程式。

問題內容

我有一個可與 Postgres 資料庫配合使用的 Java Spring Boot 應用程式。我想對它們都使用 Docker。我最初只將 Postgres 放入 Docker 中,並且有一個 docker-compose.yml 文件,定義如下:

version: '2'
services:
    db:
        container_name: sample_db
        image: postgres:9.5
        volumes:
            - sample_db:/var/lib/postgresql/data
        environment:
            - POSTGRES_PASSWORD=sample
            - POSTGRES_USER=sample
            - POSTGRES_DB=sample
            - PGDATA=/var/lib/postgresql/data/pgdata
        ports:
            - 5432:5432

volumes:
    sample_db: {}
登入後複製

然後,當我發出命令 sudo dockerdsudo docker-compose -f docker-compose.yml up 時,它正在啟動資料庫。例如,我可以使用 pgAdmin 進行連接,使用 localhost 作為伺服器和連接埠 5432。然後,在我的 Spring Boot 應用程式中,在 application.properties 檔案中定義了以下屬性。

spring.datasource.url=jdbc:postgresql://localhost:5432/sample
spring.datasource.username=sample
spring.datasource.password=sample
spring.jpa.generate-ddl=true
登入後複製

此時,我可以透過 Spring Suite 在本地運行我的 Spring Boot 應用程序,一切正常。然後,我還想將我的 Spring Boot 應用程式新增為 Docker 映像。我首先在專案目錄中建立了一個 Dockerfile,如下所示:

FROM java:8
EXPOSE 8080
ADD /target/manager.jar manager.jar
ENTRYPOINT ["java","-jar","manager.jar"]
登入後複製

然後,我進入了發布mvn clean的專案目錄,然後是mvn install。接下來,發出 docker build -f Dockerfile -t manager . ,後面跟著 docker tag 9c6b1e3f1d5e myuser/manager:latest (id 是正確的)。最後,我編輯了現有的 docker-compose.yml 文件,如下所示:

version: '2'
services:
    web:
      image: myuser/manager:latest
      ports: 
          - 8080:8080
      depends_on:
          - db
    db:
        container_name: sample_db
        image: postgres:9.5
        volumes:
            - sample_db:/var/lib/postgresql/data
        environment:
            - POSTGRES_PASSWORD=sample
            - POSTGRES_USER=sample
            - POSTGRES_DB=sample
            - PGDATA=/var/lib/postgresql/data/pgdata
        ports:
            - 5432:5432

volumes:
    sample_db: {}
登入後複製

但是,現在如果我發出sudo docker-compose -f docker-compose.yml up 命令,資料庫會再次正確啟動,但我會收到錯誤並退出Web 應用程式部分的程式碼1 。問題是連接字串。我相信我必須將其更改為其他內容,但我不知道它應該是什麼。我收到以下錯誤訊息:

web_1  | 2017-06-27 22:11:54.418 ERROR 1 --- [           main] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.
web_1  | 
web_1  | org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections
登入後複製

有什麼想法嗎?

解決方法

每個容器都有自己的網路介面和自己的本機主機。因此改變 Java 指向 Postgres 的方式:

spring.datasource.url=jdbc:postgresql://localhost:5432/sample
登入後複製

致:

spring.datasource.url=jdbc:postgresql://db:5432/sample
登入後複製

db 將解析為正確的 Postgres IP。

<小时>

獎金。使用 docker-compose,您無需手動建立映像。所以改變:

web:
  image: myuser/manager:latest
登入後複製

致:

web:
  build: .
登入後複製

我遇到了同樣的問題,我花了一些時間來理解和解決這個問題:

org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
登入後複製

我展示了所有屬性,以便每個人都能理解。 application.properties:

#
spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL82Dialect
spring.jpa.hibernate.ddl-auto=update
登入後複製

docker-compose.yml:

version: "3"
  services:
    springapp:
      build: .
      container_name: springapp
      environment:
        SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testdb
      ports:
        - 8000:8080
      restart: always
      depends_on:
        - db
    db:
      image: postgres
      container_name: db
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
        - POSTGRES_DB=testdb
        - PGDATA=/var/lib/postgresql/data/pgdata
      ports:
        - 5000:5432
      volumes:
        - pgdata:/var/lib/postgresql/data
      restart: always
  volumes:
    pgdata:
登入後複製

為了使用本機資料庫啟動 Spring 應用程序,我們使用 url localhost。 為了使用資料庫連接到容器,我們需要更改資料庫服務上的“localhost”,在我的例子中,將“localhost”更改為“db”。 解決方案:在docker-compose.yml中新增SPRING_DATASOURCE_URL環境,重寫spring.datasource.url連線值:

environment:
    SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testdb
登入後複製

我希望這可以幫助人們節省時間。

以上是Docker Compose + Spring Boot + Postgres 連接的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1319
25
PHP教程
1269
29
C# 教程
1249
24
JUnit單元測試框架:使用它的優點和局限性 JUnit單元測試框架:使用它的優點和局限性 Apr 18, 2024 pm 09:18 PM

JUnit單元測試框架是一個廣泛使用的工具,主要優點包括自動化測試、快速回饋、提高程式碼品質和可移植性。但它也有局限性,包括範圍有限、維護成本、依賴性、記憶體消耗和缺乏持續整合支援。對於Java應用程式的單元測試,JUnit是一個強大的框架,提供了許多好處,但使用時需要考慮其限制。

Java模擬器推薦:這五款好用又實用! Java模擬器推薦:這五款好用又實用! Feb 22, 2024 pm 08:42 PM

Java模擬器是一種能夠在電腦或裝置上運行Java應用程式的軟體。它可以模擬Java虛擬機器並執行Java字節碼,使用戶能夠在不同平台上執行Java程式。 Java模擬器在軟體開發、學習和測試等方面有著廣泛的應用。本文將介紹五款好用且實用的Java模擬器,它們能夠滿足不同使用者的需求,幫助使用者更有效率地開發和執行Java程式。第一款模擬器是Eclipse。 Ecl

如何在Debian 12上安裝Java:一步一步指南 如何在Debian 12上安裝Java:一步一步指南 Mar 20, 2024 pm 03:40 PM

Java是一種功能強大的程式語言,使用戶能夠創建廣泛的應用程序,例如建立遊戲、創建網路應用程式和設計嵌入式系統。 Debian12是一個強大的新發布的基於Linux的作業系統,為Java應用程式的蓬勃發展提供了穩定可靠的基礎。與Java和Debian系統一起,您可以打開一個充滿可能性和創新的世界,這肯定可以幫助人們很多。只有在您的Debian系統上安裝了Java才能做到這一點。在本指南中,您將了解:如何在Debian12上安裝Java如何在Debian12上安裝Java如何從Debian12中刪

常見log4j設定檔問題及解決方法 常見log4j設定檔問題及解決方法 Feb 19, 2024 pm 08:50 PM

log4j設定檔的常見問題及解決方案在Java應用程式的開發過程中,日誌是一項非常重要的功能。而log4j是Java中一個廣泛使用的日誌框架。它透過設定檔來定義日誌的輸出方式,可以非常方便地控制日誌的等級和輸出位置。然而,有時在配置log4j時會遇到一些問題,本文將介紹一些常見的問題及其解決方案,並附上具體的程式碼範例。問題一:日誌檔沒有產生解決方案:

Oracle API使用指南:探索資料介面技術 Oracle API使用指南:探索資料介面技術 Mar 07, 2024 am 11:12 AM

Oracle是一家全球知名的資料庫管理系統供應商,其API(ApplicationProgrammingInterface,應用程式介面)是一種強大的工具,可協助開發人員輕鬆地與Oracle資料庫互動和整合。在本文中,我們將深入探討OracleAPI的使用指南,向讀者展示如何在開發過程中利用資料介面技術,同時提供具體的程式碼範例。 1.Oracle

基礎教學:使用IDEA建立Maven項目 基礎教學:使用IDEA建立Maven項目 Feb 19, 2024 pm 04:43 PM

IDEA(IntelliJIDEA)是一款強大的整合開發環境,可協助開發人員快速且有效率地開發各種Java應用程式。在Java專案開發中,使用Maven作為專案管理工具能夠幫助我們更好地管理依賴函式庫、建置專案等。本文將詳細介紹如何在IDEA中建立一個Maven專案的基本步驟,同時提供具體的程式碼範例。步驟一:開啟IDEA並建立新專案開啟IntelliJIDEA

將 Java 連接到 MySQL 資料庫 將 Java 連接到 MySQL 資料庫 Feb 22, 2024 pm 12:58 PM

如何用java連接到mysql資料庫?當我嘗試時,我得到java.sql.sqlexception:nosuitabledriverfoundforjdbc:mysql://database/tableatjava.sql.drivermanager.getconnection(drivermanager.java:689)at.sql.drivermanager.getconnection(drivermanager.java:689)at.sql.drivermanager.getconnection(drivermanager.java:247)或java:247)或java:247)或java:247

Java EJB架構詳解,建構穩定可擴展的系統 Java EJB架構詳解,建構穩定可擴展的系統 Feb 21, 2024 pm 01:13 PM

什麼是EJB? EJB是一種Java平台企業版(JavaEE)規範,定義了一組用於建構伺服器端企業級Java應用程式的元件。 EJB元件封裝了業務邏輯,並提供了一組用於處理事務、並發、安全性和其他企業級關注點的服務。 EJB體系結構EJB體系結構包括以下主要元件:企業Bean:這是EJB元件的基本建構塊,它封裝了業務邏輯和相關的資料。 EnterpriseBean可以是無狀態的(也稱為會話bean)或有狀態的(也稱為實體bean)。會話上下文:會話上下文提供有關當前客戶端互動的信息,例如會話ID和客戶端