簡體   English   中英

使用 docker-compose 連接另一個容器中的兩個數據庫

[英]Connecting two a database in a another container with docker-compose

我正在嘗試設置一個 docker-compose,其中一個容器有數據庫,另一個容器有應用程序。 據我所知,我需要將兩個容器與網絡連接起來。

version: "3"
services:
  psqldb:
    image: "postgres"
    container_name: "psqldb"
    environment:
      - POSTGRES_USER=usr
      - POSTGRES_PASSWORD=pwd
      - POSTGRES_DB=mydb
    ports:
      - "5432:5432"
    expose:
      - "5432"
    volumes:
      - $HOME/docker/volumes/postgres/:/var/lib/postgresql/data
    networks:
      - backend
  sbapp:
    image: "dsb"
    container_name: "dsb-cont"
    ports:
      - "8080:8080"
    expose:
      - "8080"
    depends_on:
      - psqldb
    networks:
      - backend

networks:
  backend:

我還嘗試將網絡驅動程序設置為bridge (這並沒有改變最終結果)

networks:
  backend:
    driver: bridge

我正在使用以下 url 連接數據庫

spring.datasource.url=jdbc:postgresql://psqldb:5432/mydb

我還嘗試公開端口並使用localhost進行連接

spring.datasource.url=jdbc:postgresql://localhost:5432/mydb

我還嘗試使用端口 5433 而不是 5432。

無論我使用什么組合,我都會收到以下錯誤

Connection to psqldb:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

在我的應用容器中。 但是,我的數據庫容器仍然啟動,我可以使用 url 從主機正常連接到它

spring.datasource.url=jdbc:postgresql://localhost:5432/mydb

如果我完全從 docker-compose.yml 中刪除 psqldb 容器(並使用后一個連接 url),我也可以從主機連接到數據庫。

如果它有任何區別,我正在使用 Spring Boot 與 Dockerfile 一起應用

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

我正在使用命令構建圖像

docker build --build-arg JAR_FILE=target/*.jar -t dsb .

我在兩個容器設置中缺少什么?

我遇到的問題是 docker depends_on僅按定義的順序啟動容器,但不等待它們實際准備好。

https://docs.docker.com/compose/startup-order/

暫無
暫無

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

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