![](/img/trans.png)
[英]Access postgres docker container with spring boot application
[英]Spring Docker container cannot access Postgres Docker container
我的 spring-boot 應用程序的 Dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/media-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/media
username: postgres
password: postgres
hikari:
connectionTimeout: 30000
這是docker-compose.yml
:
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_DB: media
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
app:
build:
context: ./
dockerfile: Dockerfile
depends_on:
- db
ports:
- "8080:8080"
運行docker-compose up --build
結果:
應用程序_1 | org.postgresql.util.PSQLException:連接到 0.0.0.0:5432 被拒絕。 檢查主機名和端口是否正確以及 postmaster 是否正在接受 TCP/IP 連接。 應用_1
我的猜測是 spring 應用程序嘗試在 postgres 准備好之前連接到 postgres,但我得到以下日志:
db_1 | 2019-05-18 19:05:53.692 UTC [1] LOG:數據庫系統已准備好接受連接
Docker Compose 的主要目的是啟動一組 Docker 容器,然后它們將作為獨立的實體運行。 默認情況下,所有容器都將與所有其他容器建立虛擬網絡連接,但您可以根據需要進行更改; 您將獲得該功能,因為您尚未指定自定義配置。
每個容器都將在 Docker 設置的虛擬網絡中獲得一個虛擬 IP 地址。 由於這些是動態的,Docker Compose 通過創建與每個服務對應的內部 DNS 條目使您更容易。 因此,您將有兩個容器,它們可以分別作為app
和db
尋址,可以來自它們自己或來自另一個。 如果您安裝了 ping,您也可以通過docker-compose exec
或通過手動創建的 shell ping 這些名稱。
因此,正如我們在評論中發現的那樣,您可以從app
連接到jdbc:postgresql://db:5432/media
,它應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.