执行docker build -t构建镜像时RUN javac Main.java步骤报错求助
报错触发原因
- 构建上下文目录下不存在与文件名完全匹配的
Main.java文件,COPY . /src/java指令执行后镜像内无对应源文件,javac编译时找不到目标文件。 - Linux环境大小写敏感,若实际文件名为
main.java等大小写不匹配的名称,也会触发找不到文件的报错。 - 项目根目录的
.dockerignore文件配置了*.java等排除规则,导致Main.java没有被复制到镜像内。 Main.java本身存在语法错误,本地编译就无法通过,镜像内编译自然失败。- 额外隐藏问题:你现有Dockerfile的
ENTRYPOINT指令参数写错,Java主类名大小写敏感,编译生成的是Main.class,执行java main会报主类找不到错误,就算编译通过也无法正常运行。
修复步骤
- 校验本地构建目录文件
执行
ls命令确认当前执行docker build的目录下确实存在大小写完全匹配的Main.java文件,若文件存放在其他子目录,调整COPY指令的源路径或者将文件移动到构建上下文根目录。
- 检查
.dockerignore规则
打开项目根目录的
.dockerignore文件,删除或修改排除.java后缀文件的规则,保证Main.java可以被正常复制到镜像内。
- 本地预编译校验代码
本地先执行
javac Main.java命令测试编译是否正常通过,排查并修复代码语法错误后再执行镜像构建。
- 修正Dockerfile错误配置
将
ENTRYPOINT的参数从main改为Main,修复主类名大小写错误。
修复后的完整Dockerfile参考:
FROM openjdk:14 COPY . /src/java WORKDIR /src/java # 排查问题时可临时加下面这行,验证文件是否成功复制到镜像内 # RUN ls RUN ["javac", "Main.java"] ENTRYPOINT ["java", "Main"]
内容的提问来源于stack exchange,提问作者minal.m
相关产品推荐
相关产品推荐

