【问题标题】:Unable to run './mvnw clean install' when building docker image based on "openjdk:8-jdk-alpine" for Spring Boot app为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”
【发布时间】:2019-03-15 20:41:12
【问题描述】:

我想在 docker 容器中使用 spring.io.starter 提供的 maven 包装器构建一个 Spring Boot 应用程序。 我的 Dockerfile 是:

FROM openjdk:8-jdk-alpine
# install bash --> commented because I just need /bin/sh which is already provided by the base image
#RUN apk add --no-cache bash
ENV APP_DIR /app
ENV APP app.jar
WORKDIR ${APP_DIR}
COPY . ${APP_DIR}
# ===> HERE THE PROBLEM
RUN /bin/sh -c "./mvnw clean install"
ENTRYPOINT ["java","-jar","chicowa-app.jar"]
EXPOSE 8080

我有这个错误:

/bin/sh: ./mvnw: not found

经过一些研究,我仍然没有找到解决方案。 我的码头工人版本 Docker version 18.06.1-ce, build e68fc7a 在 Windows10 专业版上

非常感谢您的帮助。

编辑

解决方案是直接使用 RUN apk add --no-cache maven 安装 maven,但我想尽可能减小图像的大小。

【问题讨论】:

  • 嗯 ${APP_DIR} 的值是多少
  • ENV APP_DIR /app 这是所有文件复制到的目录

标签: maven docker spring-boot dockerfile


【解决方案1】:

我们只在 Windows 10 上试验了这个问题,并且能够通过应用 dos2unix 解决这个问题

dos2unix mvnw

【讨论】:

    【解决方案2】:

    我在 Window 10 中构建 Dockerfile 时遇到了同样的问题。 这是因为 mvnw 文件在行尾包含 CRLF (\r\n)。我用记事本++打开它并使用查找\r\n并替换为\n(选中扩展(\n,\r,...))。您可以使用 dos2unix 工具进行转换,如上面@Juanan 所说。

    之后,构建运行没有问题。

    【讨论】:

    • 有同样的问题,替换行尾工作完美。谢谢。
    【解决方案3】:

    除非您在文件 mvnw 所在的确切位置运行脚本,否则它将无法工作。

    如果您的 PATH 设置正确,并且 Maven 安装在合适的位置,只需删除命令前面的“./”即可。

    RUN /bin/sh -c “mvnw clean install”
    

    如果 mvnw 不在您的 PATH 中,您可以在脚本中指定完整路径(但要认识到 Maven 可能会调用其他需要相同 PATH 更改的东西)。

    【讨论】:

    • 我删除了 ./ 但结果相同。我不想安装 Maven 那么“如果您的 PATH 设置正确,并且 Maven 安装在合适的位置......”是什么意思
    • 如果你没有安装maven,那么mvnw是不存在的,你的问题没有解决办法,不包括安装maven。
    • 我想你没有理解我的问题。看看这里关于maven wrapperbaeldung.com/maven-wrapper
    • 我确实误会了,也就是说,我不确定为什么该页面声称您不需要安装 maven。 maven wrapper 的安装说明专门使用了 Maven。没有它,您无法将其添加到项目中并下载所需的文件。 cd your_project mvn -N io.takari:maven:wrapper 祝你好运。
    • 我在我的 PC 上进行了测试,我从 PATH 中删除了 MAVEN_HOME,在我的项目中运行 ./mvnw clean install 并且它有效。所以那个页面的作者是绝对正确的。
    【解决方案4】:

    如果您已经配置了 maven,那么您可以运行以下命令:-

    mvn clean install
    

    它将无缝构建 docker 映像。

    【讨论】:

    • 谢谢!这对我有用
    【解决方案5】:

    如果您使用的是 windows git 可能会将 mvnw 文件的行尾更改为 CRLF。如果您使用任何文本编辑器打开文件并将其保存到 LF,它可能会起作用。

    【讨论】:

      【解决方案6】:

      使用

      RUN chmod +x mvnw 
      

      使用前

      ./mvnw clean install 
      

      它会让你的 mvnw 文件可执行

      【讨论】:

        【解决方案7】:

        这是可行的解决方案,因为我在任何地方都找不到此解决方案:

        mvnw -版本 错误: java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须是 非空

        根本原因: java 信任库中缺少 maven 公共证书

        解决方案:

        1. https://repo.maven.apache.org 下载 - repo.maven.apache.org 叶证书并将其保存为 repo_maven.cer 格式的 base64 文件
        2. 将 repo_maven.cer 安装到 cacerts (truststore) keytool -import -keystore "...\openjdk-8u41\jre\lib\security\cacerts" -file "repo_maven.cer" -alias maven

        输出: mvnw-版本 阿帕奇 Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)

        【讨论】:

          猜你喜欢
          • 2020-07-11
          • 2017-03-20
          • 2020-01-08
          • 2019-04-23
          • 1970-01-01
          • 2021-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多