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

运行Docker容器出现file not found错误,容器直接停止如何解决

错误原因分析

  • 路径分隔符使用错误:你当前使用的maven:3.8.1-adoptopenjdk-11是Linux系统镜像,Linux使用正斜杠/作为路径分隔符,你写的Windows风格反斜杠\在Linux shell中会被识别为转义符,因此home\prefs\run.bat会被解析为无分隔符的homeprefsrun.bat,和报错信息完全匹配。
  • 大小写敏感问题:Linux系统对路径大小写敏感,你复制文件的目标路径是/home/Prefs(大写P),而CMD中写的是prefs(小写p),路径本身也不匹配。
  • 系统兼容性问题:bat是Windows平台的批处理脚本,Linux镜像原生不支持bat文件的执行,同时CMD中写的cmd也是Windows独有命令,Linux环境不存在该命令。

第一步:确认文件是否成功复制到容器

执行以下命令直接进入容器交互终端,覆盖默认启动指令:

docker run -it --entrypoint /bin/sh demo2

进入容器后执行以下命令即可查看目录下的所有文件,确认复制是否成功:

ls -l /home/Prefs

推荐解决方案(保留Linux基础镜像)

将Windows批处理逻辑转换为Linux shell脚本,适配镜像环境:

  1. 项目目录下新建run.sh文件,内容参考原bat文件逻辑编写,示例:
#!/bin/bash
# 切换到jar包所在目录
cd /home/Prefs
# 执行jar包,替换为你原bat中的实际启动参数
java -jar KickStart.jar
  1. 修改Dockerfile内容如下:
FROM maven:3.8.1-adoptopenjdk-11
COPY Prefs /home/Prefs
COPY KickStart.jar /home/Prefs/KickStart.jar
# 给shell脚本添加执行权限
RUN chmod +x /home/Prefs/run.sh
# 执行启动脚本
CMD ["/home/Prefs/run.sh"]
  1. 重新构建镜像后执行run命令即可正常启动。

如果需要容器执行完脚本后保持运行不退出,可以把CMD修改为:

CMD ["/bin/sh", "-c", "/home/Prefs/run.sh && /bin/bash"]

启动时添加-it参数即可进入交互终端。


可选解决方案(保留bat文件)

如果必须使用bat脚本,需要将基础镜像替换为Windows版本的JDK镜像,示例:

FROM openjdk:11-jdk-windowsservercore
COPY Prefs C:/home/Prefs
COPY KickStart.jar C:/home/Prefs/KickStart.jar
CMD C:/home/Prefs/run.bat

注意Windows镜像体积远大于Linux镜像,启动速度也更慢,非必要不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 10:45:11