Приложение Spring Boot не работает внутри Docker-контейнера: ошибка при подключении к базе данных PostgresJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Приложение Spring Boot не работает внутри Docker-контейнера: ошибка при подключении к базе данных Postgres

Сообщение Anonymous »

Я новичок в Docker, я пытаюсь запустить приложение Spring Boot в контейнере Docker.
Приложение использует базу данных Postgres, которая работает на моем локальном компьютере.
Это тот шаг, который я сделал
application.properties
spring.datasource.url= jdbc:postgresql://localhost:5432/TechDB
spring.datasource.username= myuser
spring.datasource.password= mypass

Файл Docker
FROM openjdk:22
LABEL maintainer="myself"
ADD target/AppToTest-1.0-SNAPSHOT.jar AppToTest.jar
ENTRYPOINT ["java", "-jar", "AppToTest.jar"]

Создайте изображение:
docker build -t apptotest:latest .

запустите контейнер
docker run -p 8000:8080 apptotest

Когда я пытаюсь вызвать свой API через порт 8000, я получаю ошибку сервера на стороне Spring:
[nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08001
[nio-8080-exec-1] 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.

Для пояснения: приложение работает нормально, когда я запускаю простое приложение весенней загрузки, и правильно извлекает данные из моего Postgres
***Edit***

Я пытался запустить как контейнер Postgres, так и базу данных вместе с файлом композитора, выполнив следующие шаги:
Я добавил в DockerFIle:
FROM postgres:15.1-alpine
COPY *.sql /docker-entrypoint-initdb.d/

Я создал сценарий инициализации схемы в папке проекта.
Я создал файл docker-compose.yml
services:
postgres:
build:
context: .
dockerfile: Dockerfile
image: "apptotest"
container_name: "my-postgres"
environment:
POSTGRES_DB: "newdb"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "password"
POSTGRES_HOST_AUTH_METHOD: "trust"
PGDATA: "/data/newdb"
volumes:
- newdb:/data/newdb
ports:
- "5432:5432"
restart: unless-stopped
volumes:
newdb:
external: true

затем я создаю образы для postgres и myapp, затем запускаю контейнеры таким образом: сначала я запускаю контейнер postgres, а затем свое приложение:
docker network create test_network
docker volume create newdb
docker-compose up -d

на этом этапе я вижу, что мой экземпляр БД запустился правильно, затем я пытаюсь запустить контейнер приложения с помощью этой команды:
docker run --name apptotest--network test_network -e POSTGRES_PASSWORD="password" -e SPRING_DATASOURCE_URL=jdbc:postgresql://my-postgres:5432/newdb -p 8000:8080 apptotest

Когда я запускаю команду, я не вижу ошибок, но я не вижу работающего загрузочного приложения Spring и не могу связаться с API, который я создал, если запущу их на почтальоне.
В журналах я вижу только информацию, связанную с БД
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
LOG: database system was shut down at 2024-09-17 09:17:37 UTC
LOG: database system is ready to accept connections


Подробнее здесь: https://stackoverflow.com/questions/789 ... postgres-d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»