HAProxy を使用して新しい Docker レジストリ (v2) をセットアップしようとしています。Docker レジストリについては、docker ハブのイメージを使用し、docker run -d -p 5000:5000 -v /path/to/registry:/tmp/registry registry:2.0.1
. そして、これは私の HAProxy 構成のサブセットです。
global
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
tune.ssl.default-dh-param 2048
userlist auth_list
group docker_registry users root
user root password ***PASSWORD***
backend docker-registry
server 127.0.0.1:5000_localhost 127.0.0.1:5000 cookie 127.0.0.1:5000_localhost
frontend shared-frontend
mode http
bind *:80
bind *:443 ssl crt *** CERT FILES ***
option accept-invalid-http-request
acl domain_d.mydomain.com hdr(host) -i d.mydomain.com
acl auth_docker_registry_root http_auth(auth_list) root
redirect scheme https if !{ ssl_fc } domain_d.mydomain.com
http-request auth realm Registry if !auth_docker_registry_root { ssl_fc } domain_d.mydomain.com
use_backend docker-registry if domain_d.mydomain.com
注意すべき重要な点は、レジストリではなく HAProxy を使用して SSL ターミネーションと HTTP 認証を行っていることです。
新しいレジストリにログインしようとすると、問題が発生します。実行docker login https://d.mydomain.com/v2/
してからユーザーroot
とパスワードを入力すると、次のエラー メッセージが表示されます。
Docker クライアント:
FATA[0009] Error response from daemon: invalid registry endpoint https://d.mydomain.com/v2/: https://d.mydomain.com/v2/ does not appear to be a v2 registry endpoint. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry d.mydomain.com` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/d.mydomain.com/ca.crt
Docker デーモン:
ERRO[0057] Handler for POST /auth returned error: invalid registry endpoint https://d.mydomain.com/v2/: https://d.mydomain.com/v2/ does not appear to be a v2 registry endpoint. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry d.mydomain.com` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/d.mydomain.com/ca.crt
ERRO[0057] HTTP Error: statusCode=500 invalid registry endpoint https://d.mydomain.com/v2/: https://d.mydomain.com/v2/ does not appear to be a v2 registry endpoint. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry d.mydomain.com` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/d.mydomain.com/ca.crt
だから私は追加しようと--insecure-registry d.mydomain.com
します:
/etc/default/docker
とDOCKER_OPTS= -H unix:///var/run/docker.sock --insecure-registry d.mydomain.com
- docker を手動で起動する引数
docker -d --insecure-registry d.mydomain.com
これらのいずれも、またはオンラインで見つけた他のものも機能しません。毎回、ドッカーを再起動して再度ログインしようとすると、同じエラーメッセージが表示されます。
私が試した他のいくつかのこと:
- ブラウザ
d.mydomain.com
で 404が返される - ブラウザで次の
d.mydomain.com/v2/
結果になります。{}
https://d.mydomain.com/v2/
ログインコマンドをこれらすべてに 置き換えても成功しませんhttp://d.mydomain.com/v2/
d.mydomain.com/v2/
http://d.mydomain.com/
d.mydomain.com/
SSL ターミネーションと HTTP 認証を行う HAProxy を使用したこのセットアップは、レジストリの最初のバージョンと古いバージョンの docker を使用して過去に機能していました。では、Docker レジストリ v2 で何か変更がありましたか? これはまだ機能しますか?変更されていない場合、--insecure-registry
フラグがもう何もしないのはなぜですか?
また、これを機能させるためにしばらく取り組んできたので、試したことをすべて忘れている可能性があります。動作する可能性のあるものがあれば、お知らせください。試してみます。
ありがとう、ジェームズ・ステューイ
編集
この編集は以下の回答に移動されました