SonatypeNexusをプライベートDockerレジストリとして使用しています。
認証されたユーザーでは機能しますが、匿名ユーザーを使用して画像をプルしようとしても機能しません。これは、Dockerクライアントでのみ発生します。
Nexus UI(ログインしていない)を使用して、リポジトリ上の画像を閲覧できます。しかし、画像をプルしようとすると、「無許可」エラーが発生します。
以下は、Docker ClientとNexusリポジトリ間の通信のキャプチャストリームです。
匿名アクセスが有効になっているため、これは奇妙です。ドキュメントによると、Docker Hosted Registry(RW
を使用)がある可能性があります。 HTTPs
ポート)およびDocker Group Registryを介したアクセス、Docker Hosted Registry、RO/Anonymous
アクセス。
この機能はNexus3.6で追加されました。 ドキュメント によると:
Docker Registry APIは、プル操作の場合でもレジストリアクセスの認証を必要とし、Nexus 3も同様です。Dockerhubは、プルの場合でも常にアクセストークンを必要とします。ただし、dockerhubから匿名でプルできる理由は、匿名ユーザーにアクセストークンを自動的に配布するトークンサーバーを使用しているためです。このメカニズムは、Nexus3.0.1では現時点では利用できません。おそらく実装されるでしょう( https://issues.sonatype.org/browse/NEXUS-1081 )。
したがって、Nexus 3では、イメージをプルする前に常にログインする必要があります(最終的には、匿名ユーザーの場合、この方法で権利が設定されます)。
Nexusは、匿名の領域を変更しないことを示すかなりあいまいな sonatype post を見つけるまで、かなりの頭痛の種を引き起こしました。
したがって、これを機能させるために実行した手順:(Nexus 3.19.1、3.20.1、および3.21.1でテスト済み)
@andrewdotnによる回答と同じ([セキュリティ]> [レルム]セクションでDockerベアラートークンレルムを有効にする)
ローカル認証レルムの匿名アクセスを有効にします( 上記のリンク に記載されています)
Docker(proxy)リポジトリを作成します(この例ではプロキシhub.docker.com)
3.1。 HTTP/HTTPSエンドポイントを有効にします(SSLからネクサスにするかリバースプロキシを使用するかによって異なります)
3.2。 enable "匿名のDockerプルを許可する(Docker Bearer Token Realmが必要)"
3.3。 " https://registry-1.docker.io "as "リモートリポジトリの場所"( docker-hub の場合)
3.4。 「Dockerインデックス」を設定して、Dockerハブインデックスを使用します(別名:「Dockerハブを使用」)
3.5。保存する
匿名ユーザーが新しいリポジトリを読み取る権利を持っていることを確認してください(デフォルトのanon-roleは、かなり多くの読み取りアクセスを許可しますが、すでにanon pullを許可しているはずです)
4.1。 ([〜#〜]オプション[〜#〜])匿名ユーザーを可能な限り制限したい場合(つまり、Dockerのみを許可する場合)プル)ロール "nx-docker_read"(または同様のもの)を作成し、それに "nx-repository-view-docker--読んだ"*。 (これにより、グループ内のすべてのユーザーが任意のDockerリポジトリから画像をプルできるようになります。これにより、匿名プルは可能になりますが、web-uiには何も表示されません)
4.2。 (if u did 4.1)残りは、anonユーザーのグループを新しいロールに変更することだけです(私の例では "nx-docker_read ")そしてそれを" nx-anonymous "=>から削除します-anon-usersはweb-uiでネクサスを閲覧できなくなりましたが、画像をプルすることはできます