从“openjdk:8-jdk-alpine”为 Spring Boot 应用程序构建 docker 映像时无法运行“RUN ./mvnw dependency:go-offline -B”

Posted

技术标签:

【中文标题】从“openjdk:8-jdk-alpine”为 Spring Boot 应用程序构建 docker 映像时无法运行“RUN ./mvnw dependency:go-offline -B”【英文标题】:Unable to run 'RUN ./mvnw dependency:go-offline -B' when building docker image from "openjdk:8-jdk-alpine" for Spring Boot app 【发布时间】:2020-07-11 21:31:54 【问题描述】:

所以我试图在 docker 容器内运行一个带有 maven 包装器的 spring boot 应用程序。这是我的 Docker 文件:

### Stage 1: Build the application
FROM openjdk:8-jdk-alpine as build

RUN mkdir -p /app
#Set the current working directory inside the image
WORKDIR /app

#copy maven executable to the image
COPY mvnw .
COPY .mvn .mvn

#Copy the pom.xml file
COPY pom.xml .

#Build all the dependencies in preparation to go offline
#This is a separate step so the dependencies will be cached unless
#the pom.xml file has changed

RUN ./mvnw dependency:go-offline -B

#Copy the project source
COPY src src

#Package the application
RUN ./mvnw package -DskipTests
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

我有这个错误:

Step 7/16 : RUN ./mvnw dependency:go-offline -B
 ---> Running in 642a32f86392
/bin/sh: ./mvnw: not found
ERROR: Service 'app-server' failed to build: The command '/bin/sh -c ./mvnw dependency:go-offline -B' returned a non-zero code: 127

我正在使用 Windows 10 专业版。请问我需要你的帮助

【问题讨论】:

【参考方案1】:

可能与Unable to run './mvnw clean install' when building docker image based on "openjdk:8-jdk-alpine" for Spring Boot app 重复

你能检查mvnw shell 脚本的行尾吗? 您可以通过在执行mvnw 命令之前添加它来修复它:

RUN dos2unix mvnw

或者,如果文件在 git 中,您也可以通过将以下内容添加到 .gitattributes 文件并再次检出文件来修复它:

*.bat           text eol=crlf
mvnw            text eol=lf

【讨论】:

【参考方案2】:

您必须先将项目文件复制到/app 目录中。而且您在运行 docker build 的上下文文件夹中没有 maven 包装器。

【讨论】:

以上是关于从“openjdk:8-jdk-alpine”为 Spring Boot 应用程序构建 docker 映像时无法运行“RUN ./mvnw dependency:go-offline -B”的主要内容,如果未能解决你的问题,请参考以下文章

Docker openjdk-8-jdk-alpine 容器时间与jdk时区不同修改方法

Docker:java:openjdk-8-jdk-alpine 图像缺少 javac 和 tools.jar

POI 导出文件 报空指针异常 --Docker 中

Docker:如何将 bash 与基于 Alpine 的 docker 映像一起使用?

将值从字符转换为数字或从数字转换为字符

无法从 'char[]' 转换为 'string[]' [关闭]