sen*_*vic 5 postgresql docker spring-boot docker-compose
我的 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"]
Run Code Online (Sandbox Code Playgroud)
application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/media
username: postgres
password: postgres
hikari:
connectionTimeout: 30000
Run Code Online (Sandbox Code Playgroud)
这是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"
Run Code Online (Sandbox Code Playgroud)
运行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:数据库系统已准备好接受连接
hal*_*fer 10
Docker Compose 的主要目的是启动一组 Docker 容器,然后它们将作为独立的实体运行。默认情况下,所有容器都将与所有其他容器建立虚拟网络连接,但您可以根据需要进行更改;您将获得该功能,因为您尚未指定自定义配置。
每个容器都将在 Docker 设置的虚拟网络中获得一个虚拟 IP 地址。由于这些是动态的,Docker Compose 通过创建与每个服务对应的内部 DNS 条目使您更容易。因此,您将有两个容器,它们可以分别从它们自己或另一个被寻址为app
和db
。如果您安装了 ping,您也可以通过docker-compose exec
或通过手动创建的 shell ping 这些名称。
因此,正如我们在评论中发现的,您可以从app
到连接jdbc:postgresql://db:5432/media
,它应该可以工作。
归档时间: |
|
查看次数: |
3008 次 |
最近记录: |