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

Docker中通过参数运行已编译Java类报错如何解决

问题原因分析
  • 类名不匹配:你当前执行命令中指定的com.myapp.Server类不存在,本次构建过程只编译了com.myapp.HelloWorld1和com.myapp.HelloWorld2两个主类。
  • ENTRYPOINT写法错误:Dockerfile中ENTRYPOINT java用的是shell格式,这种格式会将命令作为/bin/sh -c的子进程启动,你在docker run时追加的参数不会被传递给java命令,相当于只执行了无参数的java,因此返回用法提示。你看到的提示翻译如下:
用法: java [选项] <主类> [参数...]
           (执行类)
  或  java [选项] -jar <jar文件> [参数...]
           (执行jar包)
  或  java [选项] -m <模块>[/<主类>] [参数...]
      java [选项] --module <模块>[/<主类>] [参数...]
           (执行模块中的主类)
  或  java [选项] <源文件> [参数]
           (执行单个源文件程序)

 跟在主类、源文件、-jar <jar文件>、-m 或 --module <模块>/<主类> 后面的参数,会被传递给主类的main方法。
解决步骤
  1. 修改Dockerfile最后一行的ENTRYPOINT为exec格式,保证参数可以正常传递:
# 把原来的 ENTRYPOINT java 替换为下面的写法
ENTRYPOINT ["java"]
  1. 重新构建镜像:
docker build -t myapp-image .
  1. 分别执行两个已编译的程序:
  • 运行HelloWorld1:docker run myapp-image com.myapp.HelloWorld1
  • 运行HelloWorld2:docker run myapp-image com.myapp.HelloWorld2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:09