首页 > 解决方案 > docker compose 错误“连接到 localhost:5432 被拒绝。”

问题描述

当我运行我的 docker-compose 时,我遇到了这个错误: 错误消息

app         | 2021-09-23 11:52:51.860 ERROR 1 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.
app         |
app         | org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
app         |   at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:280) ~[postgresql-42.2.5.jar!/:42.2.5]
app         |   at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.5.jar!/:42.2.5]
app         |   at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.5.jar!/:42.2.5]

我试图更改我的 application.properties 文件中的 url 并且错误是相同的。这是我的 application.properties 文件: application.properties

spring.datasource.url=jdbc:postgresql://postgres:5432/employees
spring.datasource.username=postgres
spring.datasource.password=root
spring.jpa.show-sql=true
server.port=8086
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

` 这是我的 Dockerfile: Dockerfile

from openjdk:8
copy ./target/springboot2-postgresql-jpa-hibernate-crud-example-0.0.1-SNAPSHOT.jar employee-jdbc-0.0.1-SNAPSHOT.jar
CMD ["java","-jar","employee-jdbc-0.0.1-SNAPSHOT.jar"]

这是我的 docker-compose: docker-compose

version: "3"
services:
 postgres:
    image: postgres:latest
    network_mode: bridge
    container_name: postgres
    volumes:
      - postgres-data:/var/lib/postgresql/data
    expose:
      - 5430
    ports:
      - 5430:5430
    environment:
      - POSTGRES_PASSWORD=root
      - POSTGRES_USER=postgres
      - POSTGRES_DB=employees

# APP*****************************************
 app:
    image: app
    network_mode: bridge
    container_name: app
    expose:
      - 8081
    ports:
      - 8081:8081
    depends_on:
      - postgres
    links:
      - postgres
    environment:
      - POSTGRES_PASSWORD=root
      - POSTGRES_USER=postgres
      - POSTGRES_DB=employees
      - POSTGRES_URL=jdbc:postgresql://postgres:5432/employees


volumes:
  postgres-data:

标签: postgresqlspring-bootdockerdocker-composedockerfile

解决方案


你可以运行这个命令来检查

sudo lsof -n -u postgres |grep LISTEN or sudo netstat -ltnp | grep postgres

应该显示 PostgreSQL 正在监听的 TCP/IP 地址和端口

可能是 postgres 已经在运行,而您的图像没有使用 docker 运行。如果它已经在运行,那么终止该进程可能会对您有所帮助。


推荐阅读