簡體   English   中英

Spring Docker 容器無法訪問 Postgres Docker 容器

[英]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 條目使您更容易。 因此,您將有兩個容器,它們可以分別作為appdb尋址,可以來自它們自己或來自另一個。 如果您安裝了 ping,您也可以通過docker-compose exec或通過手動創建的 shell ping 這些名稱。

因此,正如我們在評論中發現的那樣,您可以從app連接到jdbc:postgresql://db:5432/media ,它應該可以工作。

暫無
暫無

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

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