Как исправить ошибку ERROR Connection to localhost:5432 refused?
При попытке запустить docker-compose с 2 контейнерами контейнер java почему-то стучит на localhost:5432, хотя я указал другую переменную окружения:
Dockerfile:
FROM openjdk:22
ARG APP_JAR=target/*.jar
ADD ${APP_JAR} course.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "course.jar"]
docker-compose.yml:
version: "3.9"
services:
course_pg_17:
image: postgres
restart: always
container_name: course_pg_17
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB:
app:
build:
dockerfile: Dockerfile
container_name: app
expose:
- "8080"
ports:
- "8081:8080"
environment:
DB_USER: postgres
DB_PASSWORD: postgres
DB_URL: jdbc:postgresql://course_pg_17:5432/postgres
depends_on:
- course_pg_17
application.properties:
spring.application.name=course
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.url=${DB_URL}
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
server.port=8080
При попытке запуска контейнер с postgresql поднимается, а spring падает с ошибкой
2024-10-22T18:47:25.453265300Z 2024-10-22T18:47:25.453Z ERROR 1 --- [course] [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
По совету в комментариях я добавил переменные в Dockerfile таким образом, но это не решило проблему:
ENV DB_USER=postgres
ENV DB_PASSWORD=postgres
ENV DB_URL=jdbc:postgresql://course_pg_17:5432/postgres
Ответы (2 шт):
Автор решения: talex
→ Ссылка
Нужно задекларировать переменные среды в Docker файле добавив
ENV DB_USER
ENV DB_PASSWORD
ENV DB_URL
Полный пример
Dockerfile
FROM alpine:3.14
ENV MY_VAR="world"
CMD echo "Hello $MY_VAR"
docker-compose.yml
version: "3.9"
services:
helloworld:
build: .
container_name: helloworld
environment:
MY_VAR: my world
Автор решения: Jarvis
→ Ссылка
Проблема была в загрузке FROM openjdk:22, поменял на FROM maven:3.8.7-eclipse-temurin-17 AS builder, в итоге Dockerfile стал выглядеть так и все заработало:
FROM maven:3.8.7-eclipse-temurin-17 AS builder
WORKDIR /app
COPY pom.xml ./
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn package -DskipTests
FROM eclipse-temurin:17
WORKDIR /app
COPY --from=builder /app/target/*.jar ./app.jar
ENTRYPOINT ["java", "-jar", "./app.jar"]
EXPOSE 8080