【问题标题】:Build docker error /bin/sh: 1: ./mvnw: not found构建 docker 错误 /bin/sh: 1: ./mvnw: not found
【发布时间】:2020-07-28 07:13:14
【问题描述】:

我尝试使用 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"]

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

【问题讨论】:

  • 你可以试试,“RUN chmod 700 mvnw && mvnw clean install package ==>error on this line”没有“./”
  • @JMadushan:我已经尝试过了,但是得到 /bin/sh: 1: mvnw: not found
  • 我猜你没有将 maven wrapper (mvnw) 复制到图像中。您可以在“WORKDIR /src”行之后运行“RUN ls”来检查它。
  • @JMadushan : 添加 run ls 后,我得到如下文件列表,Compiler, Dockerfile, mvnw, mvnw.cmd, pom.xml, src, target,这是什么意思吗?对不起,我是 docker 的新手,

标签: docker maven


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      当然,如果文件有windows格式的行尾,它不会被解析为Linux文件,因此会导致找不到文件,解决它安装sudo apt-get install dos2unix并运行dos2unix mvnwthis转换文件转换成 Linux 行结束类型,因此它被识别为 Linux 文件。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          在 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。

          【讨论】:

            猜你喜欢
            • 2019-09-11
            • 2015-12-18
            • 1970-01-01
            • 2018-06-06
            • 1970-01-01
            • 2021-10-20
            • 1970-01-01
            • 2015-09-29
            • 1970-01-01
            相关资源
            最近更新 更多