docker コンテナーで独自の docker-registry をホストしています。基本認証を追加するために、別のコンテナーで実行されている nginx が前面にあります。_ping ルートを確認すると、nginx が適切にルーティングされていることがわかります。docker login
boot2docker (Mac OSX 上) から呼び出すと、次のエラーが発生します。
FATA [0003] デーモンからのエラー応答: 無効なレジストリエンドポイントです権限。このプライベート レジストリが未知の CA 証明書を使用する HTTP または HTTPS のみをサポートする場合は
--insecure-registry www.example.com:8080
、デーモンの引数に追加してください。HTTPS の場合、レジストリの CA 証明書にアクセスできる場合、フラグは必要ありません。CA 証明書を /etc/docker/certs.d/www.example.com:8080/ca.crt に配置するだけです。
これは奇妙なことです - それは有効な CA SSL 証明書だからです。--insecure-registry
次の手順に従って EXTRA-ARGS を追加しようとしました: https://github.com/boot2docker/boot2docker#insecure-registryしかし、最初は「プロファイル」ファイルが存在しません。作成して追加すると
EXTRA_ARGS="--insecure-registry www.example.com:8080"
改善が見られません。私は例を分離したかったのでdocker login
、ubuntu VM (boot2docker ではありません) から試しました。今、私は別のエラーが発生します:
Error response from daemon:
docker レジストリは、パブリック ハブから直接実行されます。
docker run -d -p 5000:5000 registry
(nginx は 8080 から 5000 にルーティングすることに注意してください)。これをデバッグするのに役立つヘルプやリソースは大歓迎です。
アップデート
この問題を包括的に解決するのに役立つガイドを探していました。具体的には:
- 非公開レジストリを作成する
- 基本認証でレジストリを保護する
- boot2docker のレジストリを使用する
レジストリを作成し、ローカルでテストしましたが、動作します。基本認証を追加するnginxでレジストリを保護しました。
問題は、実際には次の 2 種類のクライアントのレジストリを使用することです。
1) 非 boot2docker クライアント。以下の回答の1つがこれに役立ちました。/etc/default/docker のオプションに --insecure-registry フラグを追加したところ、リモートの Docker レジストリと通信できるようになりました。ただし、docker login でエラーが発生するため、これは auth と互換性がありません。
2015/01/15 21:33:57 HTTP code 401, Docker will not send auth headers over HTTP.
したがって、auth を使用する場合は、HTTPS を使用する必要があります。このサーバーは既に HTTPS 経由でサービスを提供していますが、--insecure-registry を設定すると機能しません。証明書の信頼の問題があるようですが、boot2docker 以外で解決できると確信していますが..
2) boot2docker クライアントの場合、 --insecure-registry を機能させたり、証明書を信頼したりできませんか?
更新 2
このスタック交換の質問に続いて、ca を ubuntu VM に追加することができ、boot2docker 以外のクライアントから使用できるようになりました。ただし、まだ多くの奇妙な動作があります。
現在のユーザーは docker グループのメンバーですが (sudo を使用する必要はありません)、sudo を使用する必要があります。ログインまたはプライベート レジストリからプルしようとすると、次のエラーが発生します。
user@ubuntu:~$ docker login example.com:8080
WARNING: open /home/parallels/.dockercfg: permission denied
parallels@ubuntu:~$ docker pull example.com:8080/hw:1
WARNING: open /home/parallels/.dockercfg: permission denied
また、プライベート レジストリから取得したコンテナーを初めて実行するときは、コンテナーの名前ではなく、イメージ ID でコンテナーを指定する必要があります。