Visitar URL original
docker-proxy/registry-help.md at main · izerui/docker-proxy · GitHub
Skip to content

Latest commit

 

History

History
140 lines (101 loc) · 3.73 KB

registry-help.md

File metadata and controls

140 lines (101 loc) · 3.73 KB

Docker Registry API v2 使用了一套基于 HTTP 的验证机制来确保安全性和访问控制。以下是关于 Docker Registry API v2 的验证机制的详细说明:

1. 基本原理

Docker Registry API v2 的验证机制通常涉及以下几个步骤:

  1. 客户端请求镜像:客户端向 Docker Registry 发送请求以拉取或推送镜像。
  2. Registry 响应 401 未授权:如果请求未携带有效的认证信息,Registry 会返回 401 Unauthorized 响应,并在 WWW-Authenticate 头中包含认证服务的 URL 和所需的认证范围。
  3. 客户端获取令牌:客户端根据 WWW-Authenticate 头中的信息,向认证服务发送请求以获取访问令牌(token)。
  4. 客户端使用令牌重新请求:客户端使用获取的令牌重新向 Registry 发送请求。此时,Registry 验证令牌并允许访问。

2. 认证流程

以下是一个典型的认证流程:

2.1 客户端请求镜像

客户端发送请求以拉取镜像:

GET /v2/library/nginx/manifests/latest HTTP/1.1
Host: registry-1.docker.io

2.2 Registry 返回 401 未授权

Registry 返回 401 未授权响应,并在 WWW-Authenticate 头中包含认证服务的信息:

HTTP/1.1 401 Unauthorized
Content-Type: application/json
WWW-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:library/nginx:pull"

2.3 客户端请求令牌

客户端向认证服务请求令牌:

GET /token?service=registry.docker.io&scope=repository:library/nginx:pull HTTP/1.1
Host: auth.docker.io
Authorization: Basic <base64-encoded-credentials>

2.4 认证服务返回令牌

认证服务返回访问令牌:

{
  "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
}

2.5 客户端使用令牌重新请求

客户端使用获取的令牌重新向 Registry 发送请求:

GET /v2/library/nginx/manifests/latest HTTP/1.1
Host: registry-1.docker.io
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

2.6 Registry 返回成功响应

Registry 验证令牌并返回成功响应:

HTTP/1.1 200 OK
Content-Type: application/vnd.docker.distribution.manifest.v2+json
...

3. 配置私有 Registry 的认证

对于私有 Docker Registry,可以通过配置认证服务来启用认证机制。以下是一个配置示例:

3.1 使用 htpasswd 创建用户

首先,使用 htpasswd 创建用户:

docker run --rm --entrypoint htpasswd registry:2 -Bbn myuser mypassword > auth/htpasswd

3.2 配置 Docker Registry

配置 Docker Registry 使用基本认证:

version: 0.1
log:
  fields:
    service: registry
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  htpasswd:
    realm: basic-realm
    path: /auth/htpasswd

3.3 启动 Docker Registry

使用 Docker Compose 启动 Registry:

version: '3'
services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    volumes:
      - ./auth:/auth
      - ./data:/var/lib/registry
    environment:
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=basic-realm
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd

4. 使用认证的私有 Registry

在客户端使用认证信息访问私有 Registry:

docker login myregistrydomain.com
docker pull myregistrydomain.com/myimage:mytag

总结

Docker Registry API v2 使用基于令牌的认证机制来确保安全性。通过正确配置认证服务和使用令牌,客户端可以安全地访问 Docker Registry。对于私有 Registry,可以使用基本认证或其他认证方式来保护镜像仓库。