Java 为什么在构建docker映像时apk jdk11安装突然停止工作?

Java 为什么在构建docker映像时apk jdk11安装突然停止工作?,java,docker,java-11,openjdk-11,Java,Docker,Java 11,Openjdk 11,我正在阿尔卑斯山上构建一个java应用程序,并使用阿尔卑斯山软件包管理器安装jdk11,但从昨晚开始,突然出现了一些问题。 我没有改变我docker文件中的任何内容,所以它可能是一些正在更新的包 这是我的文件 FROM amd64/alpine:3.7 RUN apk update RUN apk --no-cache add openjdk11-jdk --repository=http://dlcdn.alpinelinux.org/alpine/edge/community ENV JAV

我正在阿尔卑斯山上构建一个java应用程序,并使用阿尔卑斯山软件包管理器安装jdk11,但从昨晚开始,突然出现了一些问题。 我没有改变我docker文件中的任何内容,所以它可能是一些正在更新的包

这是我的文件

FROM amd64/alpine:3.7
RUN apk update
RUN apk --no-cache add openjdk11-jdk --repository=http://dlcdn.alpinelinux.org/alpine/edge/community
ENV JAVA_HOME=/usr/lib/jvm/default-jvm
ENV PATH=$JAVA_HOME/bin:$PATH

RUN apk --no-cache add bash
COPY ./target/myapp-.jar /
EXPOSE 80
CMD ["java", "-jar", "/myapp.jar"]
它过去可以很好地构建图像,但突然我发现以下错误

 ---> Running in 324f142bbf15
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
... //some content omitted for simplicity
(25/25) Installing openjdk11-jre (11.0.9_p11-r1)
Executing busybox-1.27.2-r11.trigger
Executing java-common-0.3-r0.trigger
sort: unrecognized option: V
BusyBox v1.27.2 (2018-06-06 09:08:44 UTC) multi-call binary.

Usage: sort [-nrugMcszbdfiokt] [-o FILE] [-k start[.offset][opts][,end[.offset][opts]] [-t CHAR] [FILE]...

Sort lines of text

    -o FILE Output to FILE
    -c  Check whether input is sorted
    -b  Ignore leading blanks
    -f  Ignore case
    -i  Ignore unprintable characters
    -d  Dictionary order (blank or alphanumeric only)
    -g  General numerical sort
    -M  Sort month
    -n  Sort numbers
    -t CHAR Field separator
    -k N[,M] Sort by Nth field
    -r  Reverse sort order
    -s  Stable (don't sort ties alphabetically)
    -u  Suppress duplicate lines
    -z  Lines are terminated by NUL, not newline
我以前没有遇到过这个错误 有人能帮我解决这个问题吗?
这导致java无法正确安装在alpine linux上。实际上,Dockerfile有两个与此错误相关的关键问题

第一个:您将特定版本的Alpine base image(这很好)修复为3.7,但是,您强制
apk
使用的不是3.7的本机存储库,而是
edge
存储库,这是一个包含最新软件的开发存储库,意味着随着时间的推移,软件包的版本会不断进步

这就是您看到的错误的确切原因,因为
openjdk11 jdk
包最近一次更新(11月30日),目标是最新的Alpine版本,而不考虑与旧版本3.7的兼容性。因此,您从
edge
存储库中获取了
openjdk11-jdk
,并且它为您工作了一段时间,但是一旦3.7和最新的Alpine版本变得足够不同,您的构建就会瘫痪。在3.7中,
sort
没有
-V
选项,但在以后的版本中有:

$ docker run -it alpine:3.7
/ # sort -V
sort: unrecognized option: V
BusyBox v1.27.2 (2018-06-06 09:08:44 UTC) multi-call binary.

Usage: sort [-nrugMcszbdfiokt] [-o FILE] [-k start[.offset][opts][,end[.offset][opts]] [-t CHAR] [FILE]...

<Long RTFM goes here>

$ docker run -it alpine:3.13
/ # sort -V

<Silently works>
一旦完成这些工作,您的构建可能意外崩溃的唯一方式就是偶尔修改存储库中的特定包版本或删除它(这是不可能的,即使发生了,错误消息也会非常清楚和可理解)


作为底线,我建议您在遇到这些挥之不去的bug之前,先用它来捕捉它们。

谢谢。在你回答之前,我已经通过更新到最新的alpine解决了这个问题。我发现您的帮助在获取特定jdk版本而不是edge方面非常有用。非常感谢!现在一切都好了
FROM amd64/alpine:3.13.0
RUN apk update
RUN apk --no-cache add openjdk11-jdk=11.0.9_p11-r1