2015-10-26 32 views
5

Zacząłem od podstawowego obrazu errordeveloper/oracle-jdk. Ten Dockerfile jest pokazany tutaj jako odniesienie:Czy Alpine Linux obsługuje certyfikaty inaczej niż Busybox?

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" ] 

Chciałbym przenieść to do Alpine Linux, więc dokonała następujących zmian:

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" ] 

Głównie Zmieniłem narzędzia do zarządzania pakietami do ciągnięcia w dół curl i certyfikaty ca.

Po potwierdzeniu oryginał buduje czyste na moim komputerze (to robi) Próbowałem moją wersję i dostał ten błąd: (I wyłączony --silent na zwinięcie go zobaczyć)

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 

Czy Alpine zrobić coś tu innego? Dlaczego mój curl/certs może się nie udać?

+0

raczej stary, ale czy ty też wypróbowałeś PEM? – Andreas

Odpowiedz

13

Wystarczy, aby mieć pewność, certyfikaty CA są tworzone/zaktualizowane gdzie oni mają, spróbuj dodać (po this answer) update-ca-certificates:

apk add ca-certificates 
update-ca-certificates 

W twoim przypadku:

RUN apk --update upgrade && \ 
    apk add curl ca-certificates && \ 
    update-ca-certificates && \ 
    rm -rf /var/cache/apk/* 
+4

To spowodowało ten błąd: OSTRZEŻENIE: ca-certificates.crt nie zawiera dokładnie jednego certyfikatu lub CRL: pomijając – Greg

+0

Porównując Alpine i Busybox zauważam również, że Busybox ma nss libs, a Alpine nie. Nie jestem pewien, czy to było ważne, więc dodałem nss jako kolejny "add". Niestety nie ma na to kostek. – Greg

+0

@Greg Czy korzystasz z Alpine 3.2? (ponieważ powinno to zostać naprawione w wersji 3.2: https://github.com/gliderlabs/docker-alpine/issues/30) – VonC