$Java_HOME
環境変数を確認した後)docker restart
コマンドを使用して)Dockerコンテナーを再起動し、サービスも再起動されることを期待して、JRE cacertから変更を選択します。しかし、これは起こりませんでした、Javaサービスは依然として外部HTTPS URLへのアクセスに失敗します。Dockerコンテナ内で実行されているJavaサービスがどのように新しい証明書のインポートでJRE cacertの変更を選択するか)
したがって、HTTPS外部URLの自己署名証明書をDockerコンテナーのJRE cacertキーストアにインポートしました。
いいえ:コンテナーを実行するDockerimageにインポートする必要があります。
コンテナーにインポートすると、作成されるのは 一時的な書き込み可能なデータレイヤー のみで、コンテナーを再起動すると破棄されます。
この答え のようなもの:
USER root
COPY ldap.cer $Java_HOME/jre/lib/security
RUN \
cd $Java_HOME/jre/lib/security \
&& keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ldapcert -file ldap.cer
既に構成されているJava jenkins、sonarqubeまたはnexusのようなベースのコンテナを使用する場合(たとえば、独自のbuild server)docker runのパラメーターを使用して、適切なcacerts
- fileをこれらのコンテナーにマウントする方が便利です。
私はopenjdkのcacerts
ファイルをベースとして使用します:
- 一時的なコンテナを使用して
cacerts
をopenjdk画像から抽出:
docker pull openjdk:latest
docker run --rm --entrypoint cat openjdk:latest /etc/ssl/certs/Java/cacerts > cacerts
ldap.cer
も含む同じフォルダーから開始された一時コンテナーを使用して、抽出されたcacerts
に証明書を追加します。
docker run --rm -v `pwd`:/tmp/certs openjdk:latest bash -c 'cd /tmp/certs && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias buenting-root -file ldap.cer'
- 抽出した
cacerts
をマウントするターゲットDockerコンテナーを実行パラメーターで実行します。 g。sonarqube
の場合:
docker run ... -v /path/to/your/prepared/cacerts:/etc/ssl/certs/Java/cacerts:ro ... sonarqube:lts
openjdkの新しいバージョンがある場合は、ホスト上のcacerts
- fileを1および2のコマンドで更新できます。
ターゲットイメージ(例:sonarqube
)を更新する場合、Dockerfile
とdocker build
を使用して独自のイメージを作成する必要はありません。
OpenJDK Java 11に基づく画像内で私のために働いた私の解決策はここにあります。
最初に言及することは、2番目の選択肢として必要なca-certificates-Java
がインストールされたJDKイメージまたはJREを使用できることです。
JDKベースのイメージのソリューションは次のとおりです。
FROM openjdk:11-jdk-slim
WORKDIR /opt/workdir/
#.crt file in the same folder as your Dockerfile
ARG CERT="certificate.crt"
#import cert into Java
COPY $CERT /opt/workdir/
RUN keytool -importcert -file $CERT -alias $CERT -cacerts -storepass changeit -noprompt
...
そして、これが[〜#〜] jre [〜#〜]ベースの画像です:
FROM openjdk:11-jre-slim
WORKDIR /opt/workdir/
#installing ca-certificates-Java to import the certificate
RUN mkdir -p /usr/share/man/man1 \
&& apt-get update \
&& apt-get install -y ca-certificates-Java
#.crt file in the same folder as your Dockerfile
ARG CERT="certificate.crt"
#import cert into Java
COPY $CERT /opt/workdir/
RUN keytool -importcert -file $CERT -alias $CERT -cacerts -storepass changeit -noprompt
...