Я новичок в 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
Приложение Spring Boot не работает внутри Docker-контейнера: ошибка при подключении к базе данных Postgres ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка сегментации PHP при подключении к базе данных доступа к базе данных
Anonymous » » в форуме Php - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-