2017-07-17 110 views
2

我一直在嘗試用Oracle Java(而不是openjdk)創建一個基於阿爾卑斯的docker鏡像。我被特意要求在這裏創建自己的形象。Docker alpine + oracle java:找不到java

這是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

+1

你怎麼沒有回聲$ JAVA_HOME和$ PATH得到什麼? – Edwin

+0

JAVA_HOME:'/ opt/jdk' PATH:'/ usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ opt/jdk/bin' – phanteh

+0

你可以嘗試'運行回聲「$(java -version)」'? – Edwin

回答

3

你不能達到你想要的東西。

Alpine Linux使用MUSL作爲標準C庫。

Oracle的Java for Linux依賴於GNU標準C庫(gclib)。

有理論上的方法,但它不像你想象的那麼微不足道。

this link

Here is a bit more detailed info and official stance from Oracle on the topic

總之使用Oracle官方的Java泊塢窗圖像

+1

..因爲他看到的退出代碼來自一個崩潰的Java進程,錯過了前述的依賴關係 – Marged

+0

感謝大家,我將制定另一個策略...... – phanteh