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

Docker镜像本地正常但K8s Pod启动报错:无法访问jar文件

Kubernetes Pod启动失败:无法访问jar文件

问题现象

执行kubectl get pods得到如下结果:

kubectl get pods
NAME                       READY         STATUS      RESTARTS   AGE
stubs-v2-78b59ccc4f-85xgr   0/1     CrashLoopBackOff   1        5m

查看Pod日志时出现错误:

➜  ~ kubectl logs stubs-v2-78b59ccc4f-85xgr 
Error: Unable to access jarfile stubs.jar

本地运行该Docker镜像时Spring Boot应用可正常启动,但部署到Kubernetes后出现上述问题。

相关配置文件

Dockerfile

FROM customimage

ENV APP_NAME=myapp \
    HOME=/home \
    LOG_DIR=/logs

RUN mkdir -p ${HOME} ${LOG_DIR} \
    && chown --recursive ${USER_NAME}:${USER_GROUP} ${HOME} ${LOG_DIR}

USER ${USER_NAME}:${USER_GROUP}

COPY target/*.jar ${HOME}/app.jar

EXPOSE 8080 9090 6566
ENTRYPOINT ["./spring_boot_app.sh"]

ReplicationController配置

apiVersion: v1
kind: ReplicationController
metadata:
  name: my-app
  namespace: custom-ns
spec:
  replicas: 1
  selector:
    app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app-stub
        image: image-ref

问题原因及解决方法

1. Jar文件名不匹配

Dockerfile中复制的jar文件名为app.jar(路径/home/app.jar),但启动脚本spring_boot_app.sh中尝试访问的是stubs.jar,导致路径匹配失败。

解决:

  • 方法一:修改启动脚本,将jar路径改为/home/app.jar或app.jar(需确保工作目录在/home);
  • 方法二:修改Dockerfile,复制jar时重命名为stubs.jar:
    COPY target/*.jar ${HOME}/stubs.jar
    

2. 工作目录未指定

Dockerfile未设置WORKDIR,默认工作目录为根目录/,启动脚本spring_boot_app.sh执行时,相对路径下找不到jar文件(jar在/home目录)。

解决:
在Dockerfile中添加WORKDIR指令,将工作目录切换到/home:

USER ${USER_NAME}:${USER_GROUP}
WORKDIR ${HOME} # 添加这一行
COPY target/*.jar ${HOME}/app.jar

3. 启动脚本路径问题

若spring_boot_app.sh不在默认工作目录,执行./spring_boot_app.sh会找不到脚本(虽然当前日志错误是jar的问题,但需确保脚本可被正确执行)。

解决:

  • 若脚本在/home目录,需在Dockerfile中确保脚本被复制到该目录(如果base镜像没有的话),并使用绝对路径执行:
    ENTRYPOINT ["/home/spring_boot_app.sh"]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:01:32