2017-11-11 42 views
2

自分のローカルネットワーク内で使用する自己署名証明書をローカルドッカーレジストリに設定します。私はドッカーマニュアル[1、2]の指示に従っていますが、それにもかかわらずエラーが発生します。自己署名証明書を使用したローカルレジストリの設定

正確には、私の問題は次のとおりです。私は、ローカルレジストリマシン上で自己署名証明書を作成します。

openssl req \         
    -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \ 
    -x509 -days 365 -out certs/domain.crt \ 
    -subj "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=openmpi-dockerregistry.local" 

私はローカルマシンのそれぞれに/etc/docker/certs.d/openmpi-dockerregistry:443/ca.crtにこの証明書を置きます。

レジストリを起動し、そこに画像をプッシュします。ネットワーク内にDNSが設定されていないので、ちょうど/etc/hostsにエントリを入れます。

次は私がローカルマシン上の画像を引っ張ってみてください、しかし、この操作は失敗します。

$ docker run -it openmpi-dockerregistry.local:443/hello-world 
Unable to find image 'openmpi-dockerregistry.local:443/hello-world:latest' locally 
docker: Error response from daemon: Get https://openmpi-dockerregistry.local:443/v2/: x509: certificate is not valid for any names, but wanted to match openmpi-dockerregistry.local. 
See 'docker run --help'. 

私はメッセージについて非常に疑わしいよ「X509:証明書は任意の名前には有効ではありません」と鳴り、私は正しくCNを指定しますが、証明書を読み込むことは反対(full output)を示しませんでした:私が試した

$ openssl x509 -text -noout -in certs/domain.crt 
.... 
    Signature Algorithm: sha256WithRSAEncryption 
     Issuer: C = US, ST = Oregon, L = Portland, O = Company Name, OU = Org, CN = openmpi-dockerregistry.local 
.... 

別のオプションは、IPによる直接レジスタにアクセスすることです。私はマニュアル[3]に従い、証明書にIP SANを追加しました。また、CN = *も設定します。結果の証明書は今(full)を以下含まれるように:

 X509v3 extensions: 
      X509v3 Subject Alternative Name: 
       IP Address:<ip address> 

しかし、私はイメージを引くしようとすると、今私は、エラーメッセージ、次のGET:

$ docker run -it <ip>:443/hello-world 
Unable to find image '<ip>:443/hello-world:latest' locally 
docker: Error response from daemon: Get https://<ip>:443/v2/: x509: cannot validate certificate for <ip> because it doesn't contain any IP SANs. 
See 'docker run --help' 

をファイル/etc/docker/certs.d/<ip>:443/ca.crtは、IPアドレスが含まれていますが。

ローカルレジストリから画像を取得する方法を教えてください。

更新

にはどうすればドッキングウィンドウのレジストリを開始していますか?

$ docker run -d \ 
    -v `pwd`/certs:/certs \ 
    -e REGISTRY_HTTP_ADDR=0.0.0.0:$REGISTRY_PORT \ 
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ 
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ 
    -p $REGISTRY_PORT:$REGISTRY_PORT \ 
    --restart=always \ 
    --name registry \ 
    registry:2 
  1. https://docs.docker.com/registry/insecure/#use-self-signed-certificates
  2. https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry
  3. https://bowerstudios.com/node/1007
+0

レジストリコンテナのログをチェックします( 'docker logs --follow $ INSTANCENAME')。証明書に問題がある場合はすぐに表示されます。それは、レジストリ 'config.yml'を見るのに役立ちます。 – Stefano

+0

「TLSハンドシェイクエラー:44428:リモートエラー:tls:不正な証明書」ドメイン名とIPアドレスの両方のアクセスに使用します。 – mcsim

+0

あなたはあなたがレジストリを始める方法を分かち合うことができますか? – Stefano

答えて

1

私はこの問題は、あなたが/etc/docker/certs.d/フォルダに証明書とキーをコピーしなかったことだと思います。

フォルダは次のようになります。私の場合は

/etc/docker/certs.d/ 
└── openmpi-dockerregistry.local:443 
    ├── client.cert 
    ├── client.key 
    └── ca.crt 

を私はca.crtがなかったし、それがうまく働きました。

参考:https://docs.docker.com/engine/security/certificates/


私は/etc/docker/certs.dにdomain.keyとdomain.crtをコピー(およびそれらを改称)した後、すべてがうまく働いていた、私のマシン上でセットアップを実装しましたフォルダ。唯一の違いは、openmpi-dockerregistry.localの代わりにopenmpi-dockerregistryを使用したことです。

+0

私は、フォルダ内にclient.certとclient.keyがありません。何とかca.crtを使ってそれらを生成する必要がありますか? – mcsim

+0

実際には、あなたがレジストリに渡した 'domain.crt'と' domain.key'です。テストのために、私はOSXで同じ設定を繰り返し、ストーリーは似ていますが、 '/ etc/docker/certs.d /'にファイルをコピーするのではなく、 '〜/ .docker/certs.d/openmpi-dockerregistry:443' – Stefano

+0

だから、client.certとca.crtは同じファイルですか? – mcsim

関連する問題