docker containerssl証明書


87

Dockerプルから取得したイメージにSSL証明書を追加するエレガントな方法はありますか?

/ etc / ssl / certsにファイルを追加し、update-ca-certificatesを実行する簡単で再現性のある方法を探しています。(これはubuntuとdebianの画像をカバーする必要があります)。

CoreOSでdockerを使用しており、coreosマシンは必要なssl証明書を信頼していますが、dockerコンテナーには明らかにデフォルトしかありません。

を使用docker run --entrypoint=/bin/bashして証明書を追加して実行しようとしましたupdate-ca-certificatesが、これはエントリポイントを永続的に上書きするようです。

私も今疑問に思っていますが/etc/ssl/certs、ホストマシンのコピーからコンテナにマウントする方がエレガントでしょうか?これを行うと、コンテナはホストと同じものを暗黙的に信頼できるようになります。

私はすべてを辞任する迷惑なプロキシを使用しています:(。これはSSLを壊し、コンテナを操作するのがちょっと奇妙になります。


3
イメージを使用するDockerfileを作成し、ファイルを追加してupdate-ca-certificatesを実行することを考えましたか?またはそれはあなたが探しているものではありませんか?
セリーヌオースール2014

私はいくつかの画像のためにそれをしました。それは悪い解決策ではありません。ただし、すべてのイメージを独自に構築する必要があります。
Beau Trepp 2014年

回答:


75

以下を使用して、Dockerコンテナに証明書をマウントし-vます。

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"

5
それはかなり気の利いたです。コンテナが同じスタイルのssl_certsを使用している場合、update-ca-certificates行も必要ありませんが、ホストはすでにそれを行っています:)。
Beau Trepp 2014年

2
クラウドで構築している場合はどうなりますか?
イウォーク

26

私はこれに似た何かをしようとしています。上でコメントしたように、カスタムDockerfile(ベースイメージとしてプルしたイメージを使用)、ADD証明書、そしてを使用して新しいイメージを構築することをお勧めしますRUN update-ca-certificates。このようにして、この新しいイメージからコンテナーを開始するたびに、一貫した状態が得られます。

# Dockerfile
FROM some-base-image:0.1
ADD you_certificate.crt:/container/cert/path
RUN update-ca-certificates

docker buildDockerfileがIMAGE_IDを生成したことに反対するとしましょう。次にdocker run -d [any other options] IMAGE_ID、そのコマンドで開始されたコンテナに証明書情報が含まれます。シンプルで再現性があります。


通常、私は他の回答で言及されているdocker run-vソリューションを好みます。ただし、Dockerのビルド中に証明書が必要な場合にも、ソリューションは機能します。ありがとう!
バスティアン2016

9
証明書をパブリックコンテナに入れることには注意が必要です。他の誰かがあなたのコンテナを引っ張ってあなたのプライベート証明書を抽出する可能性があります。
skibum55 2016

4
それは非常に良い点ですが、上記の解決策は何も公開しません。これは、ローカルで作成されてからプライベートに使用されるイメージに独自の証明書を追加することを目的としています。次に、結果のイメージをパブリックリポジトリにプッシュすることもできます、それはあなた言ったように悪い考えです。
shudgston 2016

9
証明書はいつから秘密ですか?
techraf 2018

3
サーバーは公開している証明書と一致する秘密鍵を必要とするため。
JohnRix19年

21

上記コメントで示唆されているように、ホスト上の証明書ストアがゲストと互換性がある場合は、直接マウントすることができます。

Debianホスト(およびコンテナ)で、私は正常に実行しました:

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...

では、ビルドサーバーでDockerイメージをビルドするときに何をしますか?:/
イウォーク

@EwoksいくつかのプライベートDNSで証明書をホストし、それらをヘルムチャート内にロードして、クラスターでのボリュームの作成を自動化できます。
BassamGamal19年

0

相対パスを使用して、ボリュームをコンテナーにマウントできます。

docker run -v `pwd`/certs:/container/path/to/certs ...

pwd現在の作業ディレクトリを示すの後ろのチェックマークに注意してください。が実行されるcerts現在のディレクトリにフォルダがあることを前提としていますdocker run。ローカル開発に最適で、certsフォルダーをプロジェクトに表示したままにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.