构建docker错误/ bin / sh:1:./mvnw:找不到

时间:2020-04-15 10:35:48

标签: docker maven

我尝试使用dockerfile构建Maven项目,但是在使用命令docker build时出现此错误

/bin/sh: 1: ./mvnw: not found

我尝试过以下解决方案: Unable to run './mvnw clean install' when building docker image based on "openjdk:8-jdk-alpine" for Spring Boot app

但仍然出现错误。

这是我的dockerfile

# Stage 1 Build the Spring Project into a jar file
FROM openjdk:8-slim as builder
RUN mkdir src
COPY . /src
WORKDIR /src
RUN chmod 700 mvnw && ./mvnw clean install package  ==>error on this line

# Stage 2 Run the jar file from previous build
FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
COPY --from=builder /src/target /build
WORKDIR /build
EXPOSE 80
EXPOSE 5001
ENTRYPOINT ["java", "-jar", "tax-0.0.1-SNAPSHOT.jar"]

我想念什么吗? 我很乐意提供帮助。

5 个答案:

答案 0 :(得分:5)

这已经几个月了,但是也许我可以帮上忙。

在Windows 10机器上基于openjdk:14-alpine构建映像时,我遇到了相同的问题。问题在于,本地\r\n脚本具有Windows行尾(/bin/sh mvnw称为CRLF)。

我尝试使用\n调用脚本,但是仍然会遇到问题。第一种解决方案是从我的IDE将行尾转换为Linux EOL(称为“ LF”的dos2unix

一种更好的方法是在调用脚本之前安装dos2unix mvnw并运行apt-get update && apt-get install dos2unix。在Linux Slim(Debian)上,您可以进行chmod +x mvnw

您也可以尝试使用{{1}}使脚本可执行。

希望这会有所帮助!

答案 1 :(得分:1)

当然,如果文件的结尾为Windows格式,则不会将其解析为Linux文件,因此,它将导致未找到文件,请解决此问题,安装sudo apt-get install dos2unix并运行dos2unix mvnw将此文件转换为Linux行尾类型,因此将其识别为Linux文件。

答案 2 :(得分:1)

尝试使用以下方法清除mvnw文件中的空格和CR字符:

sed -i 's/\r$//' mvnw

使用此命令后,我能够在容器内执行mvn脚本。

答案 3 :(得分:0)

使用以下脚本创建一个 bat 文件以将 \r\n 转换为 \n

powershell -NoProfile -command "((Get-Content 'mvnw') -join \"`n\") + \"`n\" | Set-Content -NoNewline 'mvnw1'"

答案 4 :(得分:0)

在 Windows 10 中,

第 1 步:从这里下载 Dos2Unix:

https://waterlan.home.xs4all.nl/dos2unix.html#DOS2UNIX

enter image description here

第 2 步:解压下载的文件夹

enter image description here

第 3 步:复制解压后的文件夹

第 4 步:转到 C:\Users\myusername(此处“myusername”只是一个示例,您应该写下您的用户名)

第 5 步:粘贴文件夹。

第 6 步: 打开 system environment variable settingsenter image description here

步骤 7: 复制您的 bin 路径或仅此行:C:\Users\myusername\dos2unix-7.4.2-win64\bin(用您的用户名更改 myusername)并将其粘贴到新变量中。 enter image description here

第 8 步: 完成!只需关闭并重新打开命令行或您的 IDE。