我尝试使用dockerfile构建Maven项目,但是在使用命令docker build
时出现此错误
/bin/sh: 1: ./mvnw: not found
但仍然出现错误。
这是我的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"]
我想念什么吗? 我很乐意提供帮助。
答案 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
第 2 步:解压下载的文件夹
第 3 步:复制解压后的文件夹
第 4 步:转到 C:\Users\myusername
(此处“myusername”只是一个示例,您应该写下您的用户名)
第 5 步:粘贴文件夹。
第 6 步: 打开 system environment variable settings:
步骤 7: 复制您的 bin 路径或仅此行:C:\Users\myusername\dos2unix-7.4.2-win64\bin
(用您的用户名更改 myusername)并将其粘贴到新变量中。
第 8 步: 完成!只需关闭并重新打开命令行或您的 IDE。