我的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:
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结果:
docker-compose up --build
app_1 | org.postgresql.util.PSQLException:拒绝与0.0.0.0:5432的连接。检查主机名和端口是否正确以及邮局主管正在接受TCP / IP连接。app_1
我的猜测是spring应用程序在postgres准备好之前尝试连接到postgres,但是我得到以下日志:
db_1 | 2019-05-18 19:05:53.692 UTC [1]日志:数据库系统已准备就绪,可以接受连接
Docker Compose的主要目的是启动一组Docker容器,然后将它们用作独立实体。默认情况下,所有容器都将与其他所有容器建立虚拟网络连接,不过您可以根据需要进行更改。您将获得该功能,因为您尚未指定自定义配置。
每个容器都将在Docker设置的虚拟网络内获得一个虚拟IP地址。由于这些是动态的,因此Docker Compose通过创建与每个服务相对应的内部DNS条目使您更轻松。所以,你将有两个容器,能够作为解决app和db分别,无论是从自己或其他。如果安装了ping,则也可以通过docker- compose exec或通过手动创建的shell 来ping这些名称。
app
db
docker- compose exec
因此,正如我们在评论中发现的那样,您可以从连接app到jdbc:postgresql://db:5432/media,它应该可以工作。
jdbc:postgresql://db:5432/media