# 运行阶段:直接使用你本地已打好的 jar(放在本目录,与 Dockerfile / docker-compose.yml 同级) # 用法:先本地执行 mvn package(JDK 21),把 target/devToolBox-1.0-SNAPSHOT.jar 复制到本目录 FROM eclipse-temurin:21-jre WORKDIR /app ENV TZ=Asia/Shanghai # JVM 默认参数(4H4G + 已跑 Redis/Gitea/Ollama 的低配场景): # -Xms256m / -Xmx512m 堆固定,避免 JVM 猜着吃;不够再上调 # ExitOnOutOfMemoryError OOM 时直接退出,交给 Docker 重启,比卡死强 # HeapDumpOnOutOfMemoryError 出事时留一份堆快照便于排查 # 想运行时调整:compose 里覆盖环境变量 JAVA_OPTS 即可 ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof" # 本目录下放且仅放一个 jar(.dockerignore 已排除 target/,避免误打包) COPY *.jar app.jar EXPOSE 8077 # sh -c "exec ..." 方式:先解析 $JAVA_OPTS,再用 exec 把 java 替换 sh 作为 PID 1, # 这样 docker stop 发的 SIGTERM 能被 JVM 正常接收、Spring Boot 走完 shutdown hook ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]