【发布时间】:2020-03-06 13:03:03
【问题描述】:
我正在尝试设置一个 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
我正在使用以下网址连接数据库
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 .
我在两个容器设置中缺少什么?
【问题讨论】:
标签: postgresql spring-boot docker-compose