当前位置: 首页 > 面试题库 >

Docker Alpine + Oracle Java:找不到Java

阙繁
2023-03-14
问题内容

我一直在尝试使用Oracle Java(而非openjdk)创建基于高山的docker映像。我被特别要求在这里创建我们自己的图像。

这是我想出的Dockerfile:

FROM alpine:3.6

RUN apk add --no-cache curl wget

RUN mkdir /opt/ && \
    wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie"\
    http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \
    tar xvf jdk-8u131-linux-x64.tar.gz -C /opt/ && \
    rm jdk-8u131-linux-x64.tar.gz && \
    ln -s /opt/jdk1.8.0_131 /opt/jdk

ENV JAVA_HOME /opt/jdk
ENV PATH $PATH:/opt/jdk/bin

RUN echo $JAVA_HOME && \
    echo $PATH

RUN which java
RUN java -version

有一些不必要的命令(如呼应JAVA_HOME目录),它被添加到帮助调试,但现在我卡住:RUN which java回报/opt/jdk/bin/java不如预期,但RUN java -version回报率/bin/sh: java: not found

我尝试了几件事,包括将可执行文件符号链接到/ usr / bin,但无济于事。

我想念什么?

编辑:码头工人的最终输出是: The command '/bin/sh -c java -version' returned a non-zero code: 127

最终编辑:

感谢diginoise将我介绍给MUSL vs libc。我发现将以下内容添加到我的Dockerfile中使我可以构建工作映像:

RUN apk --no-cache add ca-certificates && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk && \
apk add glibc-2.25-r0.apk

发现于:https :
//github.com/sgerrand/alpine-pkg-glibc


问题答案:

您无法实现自己想要的。

Alpine Linux使用MUSL作为标准C库。

Oracle的Java for Linux依赖于GNU Standard C库(gclib)。

有理论上的方法,但是没有您想的那么简单。

看到这个链接

您可以在此处和此处找到运行OracleJDK的Alpine映像的示例。这两个示例都添加了缺少的GNU C库。

这是Oracle关于该主题的更多详细信息和官方立场。

JDK源代码尚未移植到Alpine Linux,或更具体地说是musl C库。也就是说,事实证明,与JDK源代码观点相去甚远的Alpine
Linux就是C库。

简而言之, 使用官方Oracle Java Docker映像



 类似资料:
  • 问题内容: 我正在运行Windows 8,但无法使javac正常工作。 我已将环境变量中的PATH设置为 我尝试过是否使用’;’ 但无济于事。 我最近在桌面上添加了这个问题;工作,但不是这种情况。 我确保javac确实也存在于bin中。 关于修复的任何建议将不胜感激。 编辑echo%PATH%给出: 确切的错误是:无法将“ javac”识别为内部或外部命令,可操作程序或批处理文件。 问题答案: 至

  • 我运行的是Windows 8,无法让javac运行。 我把环境变量中的路径设置为 我试过带和不带';'但没有用。 最近,我的桌面上出现了这个问题,并添加了:;成功了,但这次不是。 我已经确保javac也存在于垃圾箱中。 如有任何修复建议,将不胜感激。 编辑回声%PATH%给出: 确切的错误是:“javac”不能被识别为内部或外部命令、可操作程序或批处理文件。

  • 问题内容: 我已经安装了两个jdk-jdk 1.5和jdk 1.8。我有以下Ant build.xml配置文件: 在安装jdk1.8之前,从Eclipse调用的Ant成功编译了所有源代码。但是现在,我有以下错误消息: 我的JAVA_HOME和JRE_HOME: 并在Eclipse JRE中将其设置为1.5。Java 1.8在安装过程中会设置一些配置吗? 问题答案: 已知低于1.9.0的Apache

  • 我已经安装了两个JDK--JDK1.5和JDK1.8。我有以下Ant build.xml配置文件: 在安装JDK1.8之前,从Eclipse调用的Ant成功地编译了所有源代码。但现在,我有以下错误消息: 我的JAVA_HOME和JRE_HOME: 并在Eclipse JRE中设置为1.5。Java 1.8在安装过程中是否设置了一些配置?

  • 当我尝试启动UIAutomatorViewer.bat时,我得到以下错误: 错误:没有找到合适的Java。为了正确使用Android Developer工具,您需要在系统上安装一个合适的Java JDK版本。我们建议您安装JDK版本的JavaSE,可在以下站点获得:http://www.oracle.com/technetwork/java/JavaSE/downloads 如果已经安装了Java

  • 问题内容: 我正在尝试将Spring与Hibernate结合使用。View使用JSTL。当我在浏览器中打开页面时,我看到错误: 这是我与pom.xml的依赖关系的一部分,与此相关: 哪里有问题?我正在使用tomcat版本6。 问题答案: 问题出在web.xml中的servlet版本错误。我已经做到2.5了,所有的作品。

  • 问题内容: 我收到以下错误: 但是,当我将错误中列出的select语句复制并粘贴到mysql shell中时,我得到了结果,这是预期的,因为该表具有column 。 发生此错误的原因可能是什么? 这是表的创建语句: 这是我的dao类中有关该表的几行内容: 问题答案: 检查您的SQL语句-您需要在列列表中包括: 之所以失败,是因为您尝试从中提取内容,而该内容不存在。

  • 无法从收到此错误的终端启动JMeter: 我的系统上有Java8,我的系统上也设置了,但JMeter无法获得它。