在Docker镜像中安装Java

4
我希望在Docker镜像中安装OpenJDK。 当我尝试时,出现以下错误消息:

fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community
ERROR: unsatisfiable constraints:
  openjdk8-8.121.13-r0:
    breaks: world[openjdk8=8.111.14-r0]
The command '/bin/sh -c set -x  && apk add --no-cache       openjdk8="$JAVA_ALPINE_VERSION" && [ "$JAVA_HOME" = "$(docker-java-home)" ]' returned a non-zero code: 1

My Dockerfile currently looks like this:

FROM docker:latest
RUN apk update
ENV LANG C.UTF-8
RUN { \
        echo '#!/bin/sh'; \
        echo 'set -e'; \
        echo; \
        echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \
    } > /usr/local/bin/docker-java-home \
    && chmod +x /usr/local/bin/docker-java-home
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
ENV JAVA_VERSION 8u111
ENV JAVA_ALPINE_VERSION 8.111.14-r0
RUN set -x \
    && apk add --no-cache \
        openjdk8="$JAVA_ALPINE_VERSION" \
&& [ "$JAVA_HOME" = "$(docker-java-home)" ]


1
与Docker毫无关系。这是一个Alpine限制。删除版本即可正常工作。 - user2105103
它还直接告诉您问题所在。 - johnharris85
2个回答

2

如果我需要使用另一个基础镜像呢? - Tomas F.
那么,您可能需要使用具有Java安装的特定基础映像来烘焙图像。但是,在大多数情况下,如果基础映像需要Java,则它们很可能已经在包含Java的映像中进行了烘焙。 - Leon

0

正如@user2105103所提到的,这是JDK版本的问题。

您可以简单地跳过该版本,问题将消失。例如:

FROM docker:latest

# Default to UTF-8 file.encoding
ENV LANG C.UTF-8

# add a simple script that can auto-detect the appropriate JAVA_HOME value
# based on whether the JDK or only the JRE is installed
RUN { \
        echo '#!/bin/sh'; \
        echo 'set -e'; \
        echo; \
        echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \
    } > /usr/local/bin/docker-java-home \
    && chmod +x /usr/local/bin/docker-java-home

ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin

ENV JAVA_VERSION 8u111
ENV JAVA_ALPINE_VERSION 8.111.14-r0

RUN set -x && apk add --no-cache openjdk8 && [ "$JAVA_HOME" = "$(docker-java-home)" ]

在这种情况下,您将获得最新的JDK版本。希望能帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接