Я работаю над настройкой приложения с интерфейсом React и сервером Spring Boot, а также PgAdmin и PostgreSQL. Я успешно настроил все в контейнерах Docker, включая горячую перезагрузку внешнего интерфейса. Однако настройка горячей перезагрузки серверной части оказалась сложной задачей.
Я подписался на https://panigrahi-pratap.medium.com/spr ... ve-reload-. with-docker-db585fcca37f подробно руководствовался, но своей цели так и не достиг. Изменения, внесенные в код Spring Boot, не отражаются в работающем приложении в контейнере Docker.
Вот моя настройка:
Dockerfile в / бэкэнд2
# Use Maven with OpenJDK 21
FROM maven:3.9.9 AS build
# Set the working directory inside the container
WORKDIR /app
# Copy the pom.xml and the source code to the working directory
COPY pom.xml .
COPY src ./src
# Package the application (skip tests if necessary)
RUN mvn clean package -DskipTests
# Second stage: create a lightweight image for running the application
FROM eclipse-temurin:21-jdk-alpine
# Set the working directory inside the container
WORKDIR /app
# Copy the JAR file from the build stage to the runtime stage
COPY --from=build /app/target/*.jar /app/app.jar
# Expose the port the application runs on
EXPOSE 8080
# Run the Spring Boot application with DevTools enabled
ENTRYPOINT ["java", \
"-Dspring.devtools.restart.enabled=true", \
"-Dspring.devtools.livereload.enabled=true", \
"-Dspring.devtools.remote.secret=mysecret", \
"-jar", "/app/app.jar"]
application.properties в backend2
spring.application.name=backend2
spring.devtools.remote.secret=mysecret
Pom.xml в backend2:
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.3.2
com.albion_tooling
backend2
0.0.1-SNAPSHOT
backend2
backend2
21
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
false
docker-compose.yml
version: '3.9'
services:
postgres:
container_name: database
image: postgres:16.4
hostname: localhost
ports:
- "${POSTGRES_PORT}:5432"
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- albion_tooling_postgres-data:/var/lib/postgresql/data
- ./database/docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/
restart: unless-stopped
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4
depends_on:
- postgres
ports:
- "${PGADMIN_PORT}:80"
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
restart: unless-stopped
frontend:
container_name: frontend
build:
context: ./frontend
dockerfile: Dockerfile
environment:
CHOKIDAR_USEPOLLING: "true"
ports:
- "${FRONTEND_PORT}:3000"
volumes:
- ./frontend:/app
- /app/node_modules
restart: unless-stopped
backend:
container_name: backend
build:
context: ./backend2
dockerfile: Dockerfile
ports:
- "${BACKEND_PORT}:8080"
volumes:
- ./backend2/src:/app/src
- ./backend2/target:/app/target
- ~/.m2:/root/.m2
environment:
- JAVA_OPTS=-Dspring.devtools.restart.enabled=true -Dspring.devtools.livereload.enabled=true
- SPRING_PROFILES_ACTIVE=dev
depends_on:
- postgres
restart: unless-stopped
volumes:
albion_tooling_postgres-data:
Подробнее здесь: https://stackoverflow.com/questions/788 ... pplication