构建 docker 错误 /bin/sh: 1: ./mvnw: not found

Han*_*ans 5 maven docker

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

/bin/sh: 1: ./mvnw: not found
Run Code Online (Sandbox Code Playgroud)

我尝试过这个解决方案: 在为 Spring Boot 应用程序构建基于“openjdk:8-jdk-alpine”的 docker 镜像时,无法运行“./mvnw clean install”

但仍然有错误。

这是我的 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"]
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我很乐意提供任何帮助。

Uyr*_*ric 12

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

我试过调用脚本,/bin/sh mvnw但我仍然会遇到问题。第一个解决方案是将行尾\n从我的 IDE转换为 Linux EOL(称为“LF”)。

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

您也可以尝试chmod +x mvnw使脚本可执行。


小智 7

尝试通过从文件中删除空格和 CR 字符来清理您的 mvnw 文件,使用:

sed -i 's/\r$//' mvnw
Run Code Online (Sandbox Code Playgroud)

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