You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot容器ENTRYPOINT执行失败:无法访问Jar包问题排查

问题根源

你遇到的启动错误核心原因是:容器内的/opt/rest.galleries目录被主机挂载的目录完全覆盖。

你在Dockerfile中将app.jar添加到了容器的/opt/rest.galleries目录下,但启动容器时通过Compose把主机的/opt/rest.galleries/挂载到了容器的同一路径。由于Docker的挂载规则,主机目录会完全替换容器内对应路径的内容——而你的主机/opt/rest.galleries目录里只有galleries子文件夹,没有app.jar,所以启动时自然找不到这个jar文件。

解决方案

需要把应用jar包和需要挂载的图片目录分开存放,避免挂载操作覆盖jar所在路径,具体修改如下:

1. 修改Dockerfile

将jar包放到容器内独立的应用目录,不与挂载目录重叠:

FROM amd64/eclipse-temurin:22-jre
# 创建独立的应用目录、图片目录和日志目录
RUN mkdir -p /opt/app /opt/rest.galleries/galleries /opt/rest.galleries/logs
ARG JAR_FILE
# 将jar包添加到独立的应用目录
ADD ${JAR_FILE} /opt/app/app.jar
EXPOSE 8000
# 调整启动命令指向新路径的jar包
ENTRYPOINT ["java","-jar","/opt/app/app.jar"]

2. 修改compose.yml

只挂载主机的图片目录(和日志目录,若需要持久化日志)到容器对应路径,不再挂载整个/opt/rest.galleries:

services:
  rest_galleries:
    image: rest.galleries:3.5.0
    ports:
      - 8000:8000
    volumes:
      # 仅挂载主机的图片目录到容器对应位置
      - /opt/rest.galleries/galleries:/opt/rest.galleries/galleries
      # 可选:挂载日志目录实现日志持久化
      - /opt/rest.galleries/logs:/opt/rest.galleries/logs

3. 重新构建镜像并启动

执行以下命令重新构建镜像,再启动容器:

# 重新构建镜像(确保JAR_FILE参数指向你的实际jar路径,比如target下的文件)
docker build --build-arg JAR_FILE=target/your-app.jar -t rest.galleries:3.5.0 .
# 启动容器
docker compose up -d

这样调整后,容器内的jar包存放在独立的/opt/app目录,不会被挂载操作覆盖;同时主机的图片目录正常挂载到容器内的/opt/rest.galleries/galleries,你的Spring Boot应用依然可以正常访问该目录下的图片资源。

内容的提问来源于stack exchange,提问作者CraigFoote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:35:08