私はベースイメージerrordeveloper/Oracle-jdkから始めました。このDockerfileは、参照用にここに示されています。
FROM progrium/busybox
MAINTAINER Ilya Dmitrichenko <[email protected]>
RUN opkg-install curl ca-certificates
ENV Java_HOME /usr/jdk1.8.0_31
RUN curl \
--silent \
--location \
--retry 3 \
--cacert /etc/ssl/certs/GeoTrust_Global_CA.crt \
--header "Cookie: oraclelicense=accept-securebackup-cookie;" \
"http://download.Oracle.com/otn-pub/Java/jdk/8u31-b13/jdk-8u31-linux-x64.tar.gz" \
| gunzip \
| tar x -C /usr/ \
&& ln -s $Java_HOME /usr/Java \
&& rm -rf $Java_HOME/src.Zip $Java_HOME/javafx-src.Zip $Java_HOME/man
ENV PATH ${PATH}:${Java_HOME}/bin
ENTRYPOINT [ "Java" ]
CMD [ "-version" ]
これをAlpineLinuxに移動したいので、次の変更を加えました。
FROM Alpine
MAINTAINER Ilya Dmitrichenko <[email protected]>
RUN apk --update upgrade && apk add curl ca-certificates && rm -rf /var/cache/apk/*
ENV Java_HOME /usr/jdk1.8.0_31
RUN curl \
--silent \
--location \
--retry 3 \
--cacert /etc/ssl/certs/GeoTrust_Global_CA.crt \
--header "Cookie: oraclelicense=accept-securebackup-cookie;" \
"http://download.Oracle.com/otn-pub/Java/jdk/8u31-b13/jdk-8u31-linux-x64.tar.gz" \
| gunzip \
| tar x -C /usr/ \
&& ln -s $Java_HOME /usr/Java \
&& rm -rf $Java_HOME/src.Zip $Java_HOME/javafx-src.Zip $Java_HOME/man
ENV PATH ${PATH}:${Java_HOME}/bin
ENTRYPOINT [ "Java" ]
CMD [ "-version" ]
主に、パッケージ管理ツールを変更して、curlとca-certificatesをプルダウンしました。
自分のマシンで元のビルドがクリーンであることを確認した後(実際にそうなります)、自分のバージョンを試したところ、次のエラーが発生しました:(それを確認するためにカールで--silentをオフにしました)
Step 4 : RUN curl --location --retry 3 --cacert /etc/ssl/certs/GeoTrust_Global_CA.crt --header "Cookie: oraclelicense=accept-securebackup-cookie;" "http://download.Oracle.com/otn-pub/Java/jdk/8u31-b13/server-jre-8u31-linux-x64.tar.gz" | gunzip | tar x -C /usr/ && ln -s $Java_HOME /usr/Java && rm -rf $Java_HOME/man
---> Running in c91e4939f851
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (77) error setting certificate verify locations:
CAfile: /etc/ssl/certs/GeoTrust_Global_CA.crt
CApath: none
gunzip: invalid magic
tar: short read
The command '/bin/sh -c curl --location --retry 3 --cacert /etc/ssl/certs/GeoTrust_Global_CA.crt --header "Cookie: oraclelicense=accept-securebackup-cookie;" "http://download.Oracle.com/otn-pub/Java/jdk/8u31-b13/server-jre-8u31-linux-x64.tar.gz" | gunzip | tar x -C /usr/ && ln -s $Java_HOME /usr/Java && rm -rf $Java_HOME/man' returned a non-zero code: 1
アルパインはここで何か違うことをしますか?カール/証明書が失敗するのはなぜですか?
CA証明書が想定されている場所で作成/更新されていることを確認するために、追加してみてください( この回答 の後)update-ca-certificates
:
apk add ca-certificates
update-ca-certificates
あなたの場合:
RUN apk --update upgrade && \
apk add curl ca-certificates && \
update-ca-certificates && \
rm -rf /var/cache/apk/*