Windows(boot2docker + Oracle Virtual Box)でDockerを実行しています。私の企業環境では、CAが会社の自己署名CAになるように証明書を変更します。したがって、チェーンは次のようになります。
Company's CA
|__
Company's Intermediate CA
|__
Docker Certificate
次のようなコマンドを実行しようとすると:
docker run hello-world
私はこのエラーを受け取ります:
Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority
私はこの問題に対するいくつかの答えを見つけましたが、常にLinux環境についてです。 Windowsでこの問題を回避するにはどうすればよいですか?
この一般的な問題は、数か月間私を悩ませてきました。ローカル仮想マシンを取得してPythonパッケージを取得しようとしたときに最初に気づいたので、証明書が問題になると既に考えていました。VMで解決しましたが、今日までDockerのソリューションを作成することができました。Dockerの証明書ストアに証明書を追加し、それらを永続化するのがコツです。これはbootlocal.sh
マシンが起動するたびに実行されるスクリプト。
Linuxの答えをすでに見つけているなら、最初のステップはすでにわかっていると思います。他の人がここまで得ていないかもしれないので、徹底するためにここでそれらを文書化します。以前の試みで#1と#2を既に完了している場合は、以下の#3から始めます。
企業が設定したブラウザにインストールする必要がある企業のルート証明書のセットを取得します。 Chromeでは、[設定]に移動し、[詳細設定を表示]をクリックし、[証明書の管理]を選択できるHTTPS/SSLまで下にスクロールできます。私の組織は、それらを信頼されたルート証明機関に置き、組織にちなんで命名しました。それぞれ(2つあります)、1つずつエクスポートします。 DER形式を選択し、以下の手順2を実行して[〜#〜] pem [〜 #〜]、またはBase-64エンコードx.509(.CER)を選択して、単に。pemに拡張し、ステップ2をスキップします。
既知の場所に保存したら、ダックとして保存しない限り、PEM形式に変換する必要があります。これを行うために見つけた最も簡単な方法は、Dockerクイックスタートターミナル内からopenssl.exe [1]コマンドを実行することでした。
openssl x509 -inform der -in certificate.cer -out certificate.pem
.pemファイルを取得したら、Dockerマシンがアクセスできる場所にそれらをコピーします。通常、MS Windowsの場合、ホストマシンの/ c/Usersがドッカーマシン内に自動的にマウントされます。 c:\ Users \my.username\ certsにディレクトリを作成し、そこにコピーしました。
このステップは厳密には必要ではないかもしれませんが、それは私がやったことであり、動作します。これらの証明書を永続的なboot2dockerパーティションにコピーする必要があります。デフォルトのマシンに接続しています。これはISステップ5で必要なことです。
MINGW64:$ docker-machine ssh default
docker@default:~$ Sudo -s
root@default:/home/docker# mkdir /var/lib/boot2docker/certs
root@default:/home/docker# cp /c/Users/my.username/certs/*.pem /var/lib/boot2docker/certs/
次に、システムが起動するたびに証明書を適切な場所にコピーするbootlocal.shスクリプトを作成します。[2]まだ行っていない場合は、手順4でマシンへのSSH接続を開きます。
touch /var/lib/boot2docker/bootlocal.sh && chmod +x /var/lib/boot2docker/bootlocal.sh
vi /var/lib/boot2docker/bootlocal.sh
以下を挿入して、ファイルを保存します。
#!/bin/sh
mkdir -p /etc/docker/certs.d && cp /var/lib/boot2docker/certs/*.pem /etc/docker/certs.d
マシン内からリブートコマンドを使用するか、Dockerターミナルからdocker-machineコマンドを使用して、マシンを再起動します。
docker-machine restart default
これで、「hello-world」などを実行できるはずです。これがお役に立てば幸いです。
ソース
[1] https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem
[2] https://github.com/boot2docker/boot2docker/issues/347#issuecomment-18911204
Firefoxでこれを行うには、URLに移動します。 https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io 、クリック証明書の詳細を表示し、crtとして抽出します。
ファイルをVMにコピーします。osはcrtを保存します。
CentOS
etc/pki/ca-trust/source/anchors/
# Then run
update-ca-trust force-enable
update-ca-trust extract
Ubuntu
/usr/share/ca-certificates
#Then run
Sudo dpkg-reconfigure ca-certificates
Dockerを再起動すると、動作するはずです
証明書をエクスポートするには、ファイル形式を「Base-64 encoded x.509(.CER)」として選択し、最後に証明書拡張子の名前を「。pem」に変更します。