用docker组合将两个数据库连接到另一个容器中



我正在尝试设置一个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使用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 .

在两个容器的设置中我缺少什么?

我遇到的问题是dockerdepends_on只按照定义的顺序启动容器,而不等待它们真正准备好。

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

相关内容

最新更新