基于“openjdk:8-jdk-alpine”为 Spring Boot 应用程序构建 docker 映像时,无法运行“./mvnw clean install”

aku*_*ma8 3 maven docker spring-boot dockerfile

我想使用 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
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

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

经过一些研究后我仍然没有找到解决方案。Docker version 18.06.1-ce, build e68fc7a我在 Windows10 pro 上的docker 版本

非常感谢你的帮助。

编辑

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

小智 6

我们仅在 Windows 10 上试验此问题,并且仅通过应用 dos2unix 就能够解决此问题

dos2unix mvnw
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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