web-dev-qa-db-ja.com

Alpine LinuxはBusyboxとは異なる方法で証明書を処理しますか?

私はベースイメージ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

アルパインはここで何か違うことをしますか?カール/証明書が失敗するのはなぜですか?

10
Greg

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/*
17
VonC