spring docker容器无法访问postgres docker容器

eaf3rand  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(367)

我的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]日志:数据库系统已准备好接受连接

m1m5dgzv

m1m5dgzv1#

docker compose的主要目的是构建一组docker容器,然后这些容器将作为独立的实体运行。默认情况下,所有容器都将有一个到所有其他容器的虚拟网络连接,尽管您可以根据需要更改该连接;您将获得该功能,因为您尚未指定自定义配置。
每个容器将在docker设置的虚拟网络中获得一个虚拟ip地址。由于这些都是动态的,docker compose通过创建对应于每个服务的内部dns条目,使您更轻松。因此,您将有两个容器,它们的地址可以是 app 以及 db 分别来自他们自己或其他人。如果安装了ping,也可以通过以下方式ping这些名称 docker-compose exec ,或通过手动创建的shell。
因此,正如我们在评论中发现的,您可以从 appjdbc:postgresql://db:5432/media ,它应该会起作用。

相关问题