我的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
结果:
app| org.postgresql.util.psqlexception:到0.0.0.0:5432的连接被拒绝。检查主机名和端口是否正确,以及邮局主管是否接受tcp/ip连接。附录1
我猜spring应用程序会在postgres准备好之前尝试连接到postgres,但我得到以下日志:
db| 2019-05-18 19:05:53.692 utc[1]日志:数据库系统已准备好接受连接
1条答案
按热度按时间m1m5dgzv1#
docker compose的主要目的是构建一组docker容器,然后这些容器将作为独立的实体运行。默认情况下,所有容器都将有一个到所有其他容器的虚拟网络连接,尽管您可以根据需要更改该连接;您将获得该功能,因为您尚未指定自定义配置。
每个容器将在docker设置的虚拟网络中获得一个虚拟ip地址。由于这些都是动态的,docker compose通过创建对应于每个服务的内部dns条目,使您更轻松。因此,您将有两个容器,它们的地址可以是
app
以及db
分别来自他们自己或其他人。如果安装了ping,也可以通过以下方式ping这些名称docker-compose exec
,或通过手动创建的shell。因此,正如我们在评论中发现的,您可以从
app
至jdbc:postgresql://db:5432/media
,它应该会起作用。