Dockerfile执行RUN ./mvnw报错/bin/sh:1:./mvnw:not found,求排查
解决
./mvnw: not found错误的几个方案 你的Dockerfile核心逻辑没问题,但出现这个错误通常是以下几个原因导致的,对应修复方法如下:
1. 给mvnw添加执行权限
mvnw脚本需要可执行权限才能运行,Docker的COPY指令默认不会保留文件的执行权限(Docker 20.10+版本可通过--chmod参数直接设置)。在执行./mvnw前添加权限赋予命令:
COPY mvnw ./ RUN chmod +x ./mvnw # 添加这一行赋予执行权限 RUN ./mvnw clean install
2. 修复Windows换行符问题
如果你的代码是在Windows系统下编写或克隆的,mvnw文件的换行符可能是CRLF(Windows格式),而Linux容器仅支持LF格式。可以启用你注释掉的dos2unix命令,但需要先安装该工具:
USER root # 临时切换回root用户安装工具 RUN apt-get update && apt-get install -y dos2unix USER demo # 切回demo用户 RUN dos2unix ./mvnw RUN ./mvnw clean install
也可以提前在本地配置Git,拉取代码时自动转换换行符:
git config --global core.autocrlf input
这样拉取的shell脚本会自动使用LF格式。
3. 验证文件是否正确复制
可以在执行./mvnw前添加命令,确认文件是否存在于目标目录:
RUN ls -la ./ # 查看当前目录文件,确认mvnw存在 RUN ./mvnw clean install
另外注意:你Dockerfile中RUN ./mvnw clean install后面的<-- this line gives error不属于合法注释,需要改成#开头的注释,否则会导致Dockerfile语法错误:
RUN ./mvnw clean install # 这一行报错
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

