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

Docker部署SpringBoot应用报错java: not found,求排查

Docker部署SpringBoot应用报错:java: not found 排查方案

问题描述

部署Java SpringBoot应用时触发错误:Docker /entrypoint.sh: 2: exec: java: not found,容器面板显示已配置JAVA_HOME,但通过IntelliJ运行Dockerfile仍报错。

核心原因

切换至useradmin用户后,PATH环境变量被错误覆盖,导致系统无法定位java命令。Dockerfile中这行配置存在问题:

ENV PATH="${-}:~/.aspera/cli/bin"
  • ${-}并非当前PATH变量,而是shell的参数标志位,会将PATH设置为无效值,覆盖了原本包含Java路径的系统PATH。
  • ~在环境变量中不会被解析为用户主目录,需改用绝对路径。

解决步骤

1. 修正PATH环境变量配置

将PATH设置改为基于原有系统PATH追加aspera路径,使用绝对路径替代~:

ENV PATH="/home/useradmin/.aspera/cli/bin:${PATH}"

此配置既保留了系统默认PATH(包含Java可执行文件路径),又添加了aspera CLI的路径。

2. 确保entrypoint.sh拥有执行权限

在Dockerfile中添加执行权限设置(建议放在COPY entrypoint.sh之后):

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

若已切换至useradmin用户,需确保该用户对/entrypoint.sh有修改权限,或在切换用户前完成权限设置。

3. 优化用户切换时机

将USER useradmin:useradmin放在所有需要root权限的操作(如apt安装、用户创建)之后,避免后续操作权限不足:

# 完成所有root权限操作后切换用户
USER useradmin:useradmin
# 复制aspera配置文件
COPY .aspera_cli_conf /home/useradmin/.aspera/cli/bin
COPY asperaclient.pem /home/useradmin/.aspera/cli/etc/
# 设置PATH
ENV PATH="/home/useradmin/.aspera/cli/bin:${PATH}"
# 复制应用jar包和启动脚本
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} /app.jar
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

4. (可选)添加调试信息

在entrypoint.sh中增加PATH和Java路径打印,方便排查:

#!/bin/sh
echo "当前PATH: $PATH"
which java
exec java -jar -Dspring.profiles.active=dev /app.jar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:38:14