Docker 开源项目之 registry - 配置 registry

原文地址

Registry 的配置基于 YAML 文件,下面会详细描述。虽然它带有默认值,但你应该在将系统移至生产环境之前进行详尽的检查。

1. 覆盖特定的配置选项

在从官方镜像运行 registry 的典型设置中,可以通过将 -e 参数传递环境变量到 docker run 或使用 ENV 指令从 Dockerfile 中指定一个配置变量。

要覆盖配置选项,请创建一个名为 REGISTRY_variable 的环境变量,其中 variable 是配置选项的名称,_(下划线)表示缩进级别。例如,可以配置 filesystem 存储后端的 rootdirectory

storage:
  filesystem:
    rootdirectory: /var/lib/registry

可以设置环境变量来覆盖这些值:

REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere

该变量将 /var/lib/registry 值覆盖到 /somewhere 目录。

注意:使用可配置为调整单个值的环境变量创建基本配置文件。不建议使用环境变量覆盖配置节(section)。

2. 覆盖整个配置文件

如果默认配置不适合你的使用,或者如果覆盖环境中的 key 时遇到问题,则可以指定 YAML 配置文件并将其作为卷装载到容器中。

通常,从头开始创建一个名为 config.yml 的新配置文件,然后在 docker run 命令中指定它:

$ docker run -d -p 5000:5000 --restart=always --name registry \
             -v `pwd`/config.yml:/etc/docker/registry/config.yml \
             registry:2

以此示例 YAML 文件为起点。

3. 配置选项列表

这些都是 registry 的配置选项。列表中的某些选项是互斥的。在完成配置之前,阅读有关每个选项的详细参考信息。

version: 0.1
log:
  accesslog:
    disabled: true
  level: debug
  formatter: text
  fields:
    service: registry
    environment: staging
  hooks:
    - type: mail
      disabled: true
      levels:
        - panic
      options:
        smtp:
          addr: mail.example.com:25
          username: mailuser
          password: password
          insecure: true
        from: sender@example.com
        to:
          - errors@example.com
loglevel: debug # deprecated: use "log"
storage:
  filesystem:
    rootdirectory: /var/lib/registry
    maxthreads: 100
  azure:
    accountname: accountname
    accountkey: base64encodedaccountkey
    container: containername
  gcs:
    bucket: bucketname
    keyfile: /path/to/keyfile
    rootdirectory: /gcs/object/name/prefix
    chunksize: 5242880
  s3:
    accesskey: awsaccesskey
    secretkey: awssecretkey
    region: us-west-1
    regionendpoint: http://myobjects.local
    bucket: bucketname
    encrypt: true
    keyid: mykeyid
    secure: true
    v4auth: true
    chunksize: 5242880
    multipartcopychunksize: 33554432
    multipartcopymaxconcurrency: 100
    multipartcopythresholdsize: 33554432
    rootdirectory: /s3/object/name/prefix
  swift:
    username: username
    password: password
    authurl: https://storage.myprovider.com/auth/v1.0 or https://storage.myprovider.com/v2.0 or https://storage.myprovider.com/v3/auth
    tenant: tenantname
    tenantid: tenantid
    domain: domain name for Openstack Identity v3 API
    domainid: domain id for Openstack Identity v3 API
    insecureskipverify: true
    region: fr
    container: containername
    rootdirectory: /swift/object/name/prefix
  oss:
    accesskeyid: accesskeyid
    accesskeysecret: accesskeysecret
    region: OSS region name
    endpoint: optional endpoints
    internal: optional internal endpoint
    bucket: OSS bucket
    encrypt: optional data encryption setting
    secure: optional ssl setting
    chunksize: optional size valye
    rootdirectory: optional root directory
  inmemory:  # This driver takes no parameters
  delete:
    enabled: false
  redirect:
    disable: false
  cache:
    blobdescriptor: redis
  maintenance:
    uploadpurging:
      enabled: true
      age: 168h
      interval: 24h
      dryrun: false
    readonly:
      enabled: false
auth:
  silly:
    realm: silly-realm
    service: silly-service
  token:
    realm: token-realm
    service: token-service
    issuer: registry-token-issuer
    rootcertbundle: /root/certs/bundle
  htpasswd:
    realm: basic-realm
    path: /path/to/htpasswd
middleware:
  registry:
    - name: ARegistryMiddleware
      options:
        foo: bar
  repository:
    - name: ARepositoryMiddleware
      options:
        foo: bar
  storage:
    - name: cloudfront
      options:
        baseurl: https://my.cloudfronted.domain.com/
        privatekey: /path/to/pem
        keypairid: cloudfrontkeypairid
        duration: 3000s
  storage:
    - name: redirect
      options:
        baseurl: https://example.com/
reporting:
  bugsnag:
    apikey: bugsnagapikey
    releasestage: bugsnagreleasestage
    endpoint: bugsnagendpoint
  newrelic:
    licensekey: newreliclicensekey
    name: newrelicname
    verbose: true
http:
  addr: localhost:5000
  prefix: /my/nested/registry/
  host: https://myregistryaddress.org:5000
  secret: asecretforlocaldevelopment
  relativeurls: false
  tls:
    certificate: /path/to/x509/public
    key: /path/to/x509/private
    clientcas:
      - /path/to/ca.pem
      - /path/to/another/ca.pem
    letsencrypt:
      cachefile: /path/to/cache-file
      email: emailused@letsencrypt.com
  debug:
    addr: localhost:5001
  headers:
    X-Content-Type-Options: [nosniff]
  http2:
    disabled: false
notifications:
  endpoints:
    - name: alistener
      disabled: false
      url: https://my.listener.com/event
      headers: <http.Header>
      timeout: 500
      threshold: 5
      backoff: 1000
      ignoredmediatypes:
        - application/octet-stream
redis:
  addr: localhost:6379
  password: asecret
  db: 0
  dialtimeout: 10ms
  readtimeout: 10ms
  writetimeout: 10ms
  pool:
    maxidle: 16
    maxactive: 64
    idletimeout: 300s
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
  file:
    - file: /path/to/checked/file
      interval: 10s
  http:
    - uri: http://server.to.check/must/return/200
      headers:
        Authorization: [Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==]
      statuscode: 200
      timeout: 3s
      interval: 10s
      threshold: 3
  tcp:
    - addr: redis-server.domain.com:6379
      timeout: 3s
      interval: 10s
      threshold: 3
proxy:
  remoteurl: https://registry-1.docker.io
  username: [username]
  password: [password]
compatibility:
  schema1:
    signingkeyfile: /etc/registry/key.json
validation:
  enabled: true
  manifests:
    urls:
      allow:
        - ^https?://([^/]+\.)*example\.com/
      deny:
        - ^https?://www\.example\.com/

在某些情况下,配置选项是可选的,但它包含标记为必需的子选项。在这些情况下,可以忽略父选项及其所有子选项。但是,如果使用了父选项,则必须包括所有必选的子选项。

4. version

version: 0.1

version 选项是必需的。它指定配置的版本。它必须是顶级域,以便在解析配置文件的其余部分之前进行一致的版本检查。

5. log

日志子部分配置日志记录系统的行为。日志记录系统将所有内容输出到标准输出。可以使用此配置部分调整粒度和格式。

log:
  accesslog:
    disabled: true
  level: debug
  formatter: text
  fields:
    service: registry
    environment: staging
参数是否必须描述
level设置记出日志的灵敏度。允许的值有 error,warn,info 和 debug。默认是 info。
formatter选择日志输出的格式。该格式主要影响对日志行的键控属性进行编码的方式。选项是 text,json 和 logstash。默认值是 text。
fields字段名称到值的映射。这些被添加到上下文的每个日志行。这对于在其他系统中混合后识别日志消息源很有用。

5.1 accesslog

accesslog:
  disabled: true

log 内,accesslog 配置访问日志记录系统的行为。默认情况下,访问日志记录系统以组合日志格式输出到标准输出。可以通过将布尔标志 disabled 设置为 true 来禁用访问日志记录。

6. hooks

hooks:
  - type: mail
    levels:
      - panic
    options:
      smtp:
        addr: smtp.sendhost.com:25
        username: sendername
        password: password
        insecure: true
      from: name@sendhost.com
      to:
        - name@receivehost.com

hooks 子部分配置日志 hooks 的行为。例如,该小节包含一个序列处理程序,可以使用它来发送邮件。请参阅 loglevel 以配置打印的消息级别。

7. loglevel

废弃:请使用 log。

loglevel: debug

允许值有 error, warn, info 和 debug。默认是 info。

8. storage

storage:
  filesystem:
    rootdirectory: /var/lib/registry
  azure:
    accountname: accountname
    accountkey: base64encodedaccountkey
    container: containername
  gcs:
    bucket: bucketname
    keyfile: /path/to/keyfile
    rootdirectory: /gcs/object/name/prefix
  s3:
    accesskey: awsaccesskey
    secretkey: awssecretkey
    region: us-west-1
    regionendpoint: http://myobjects.local
    bucket: bucketname
    encrypt: true
    keyid: mykeyid
    secure: true
    v4auth: true
    chunksize: 5242880
    multipartcopychunksize: 33554432
    multipartcopymaxconcurrency: 100
    multipartcopythresholdsize: 33554432
    rootdirectory: /s3/object/name/prefix
  swift:
    username: username
    password: password
    authurl: https://storage.myprovider.com/auth/v1.0 or https://storage.myprovider.com/v2.0 or https://storage.myprovider.com/v3/auth
    tenant: tenantname
    tenantid: tenantid
    domain: domain name for Openstack Identity v3 API
    domainid: domain id for Openstack Identity v3 API
    insecureskipverify: true
    region: fr
    container: containername
    rootdirectory: /swift/object/name/prefix
  oss:
    accesskeyid: accesskeyid
    accesskeysecret: accesskeysecret
    region: OSS region name
    endpoint: optional endpoints
    internal: optional internal endpoint
    bucket: OSS bucket
    encrypt: optional data encryption setting
    secure: optional ssl setting
    chunksize: optional size valye
    rootdirectory: optional root directory
  inmemory:
  delete:
    enabled: false
  cache:
    blobdescriptor: inmemory
  maintenance:
    uploadpurging:
      enabled: true
      age: 168h
      interval: 24h
      dryrun: false
    readonly:
      enabled: false
  redirect:
    disable: false

存储选项是必需的,它定义了哪个存储后端正在使用中。必须完全配置一个后端。如果配置了多个存储后端,则 registry 会返回错误。可以选择以下任何后端存储驱动程序:

存储驱动程序描述
filesystem使用本地磁盘来存储 registry 文件。它非常适合开发,可能适用于一些小规模生产应用。请参阅 驱动程序的参考文档
azure使用 Microsoft Azure Blob Storage。参考 驱动程序的手册
gcs使用 Google Cloud Storage。参考 驱动程序的手册
s3使用 Amazon Simple Storage Service (S3) 和 compatible Storage Services。参考 驱动程序的手册
swift使用 Openstack Swift object storage。参考 驱动程序的手册
oss使用 Aliyun OSS for object storage。参考 驱动程序的手册

仅用于测试的话,可以使用 inmemory 存储驱动程序。如果你想从易失性存储器运行 registry,请在 ramdisk 上使用 文件系统驱动程序

如果在 Windows 上部署 registry,则不推荐从主机挂载 Windows 卷。相反,可以使用 S3 或 Azure 支持数据存储。如果确实使用 Windows 卷,则到安装点的 PATH 长度必须在 MAX_PATH 限制(通常为255个字符)内,否则会发生此错误:

mkdir /XXX protocol error and your registry will not function properly.

8.1 maintenance

目前,上传清除和只读模式是唯一可用的 maintenance(维护)功能。

8.2 uploadpurging

上传清除(uploadpurging)是一个后台进程,可以定期从 registry 的上传目录中删除孤立的文件。上传清除默认情况下处于启用状态。要配置上传目录清除,必须设置以下参数。

参数是否必须描述
enabled默认 true。设置为 true 则开启上传清除。
age默认 168 小时,即 1 周。上传目录大于这个时间后,删除上传目录。interval
dryrundryrun 设置为 true 以获取要删除的目录的摘要。默认为 false。

注意:ageinterval 是包含具有可选的分数和单位后缀的数字的字符串。例如:45m,2h10m,168h。

8.3 readonly

如果将 maintenance 下的 readonly 部分的 enabled 设置为 true,则不允许客户端写入 registry。此模式对于临时阻止写入后端存储非常有用,此时可以运行垃圾回收。在运行垃圾回收之前,registry 应该在 readonlyenabled 设置为 true 的情况下重新启动。垃圾收集过程完成后,registry 可能会重新启动,这次只能从配置中只读取(或设置为 false)。

8.4 delete

使用 delete 可以通过摘要删除镜像的 blob 和清单(Use the delete structure to enable the deletion of image blobs and manifests by digest)。默认是 false,但可以通过在配置文件中写入以下内容来启用它:

delete:
  enabled: true

8.5 cache

使用 cache 来启用在存储后端访问的数据的缓存。目前,唯一可用的缓存提供对层元数据(layer metadata)的快速访问,层元数据使用 blobdescriptor 字段(如果已配置)。

可以将 blobdescriptor 字段设置为 redisinmemory。如果设置为 redis,则 Redis 池会缓存层元数据。如果设置为 inmemory,则内存映射会缓存层元数据。

注意:以前,blobdescriptor 被称为 layerinfo。虽然这是一样的,但 layerinfo 已被弃用。

8.6 redirect

redirect 子部分提供了用于管理来自内容后端的重定向的配置。对于支持它的后端,默认情况下启用重定向。在某些部署方案中,你可能决定将所有数据路由到 registry,而不是重定向到后端。当使用不共存的后端或者当 registry 实例积极缓存时,这可能会更有效(This may be more efficient when using a backend that is not co-located or when a registry instance is aggressively caching)。

要禁用重定向,请在 redirect 下添加一个 disable 标志,将其设置为 true:

redirect:
  disable: true

9. auth

auth:
  silly:
    realm: silly-realm
    service: silly-service
  token:
    realm: token-realm
    service: token-service
    issuer: registry-token-issuer
    rootcertbundle: /root/certs/bundle
  htpasswd:
    realm: basic-realm
    path: /path/to/htpasswd

auth 选项是可选的。可能的 auth provider 包括:

  • silly
  • token
  • htpasswd

只能配置一个 auth provider 。

9.1 silly

silly 身份验证程序只适合开发。它只是检查 HTTP 请求中是否存在 Authorization 标头。它不检查 header 的值。如果 header 不存在,那么 silly 认证返回 challenge 响应,回应拒绝访问的 realm,service 和 scope。

以下值用于配置响应:

参数是否必须描述
realm注册表服务器进行身份验证的 realm (领域)。
service进行身份验证的服务。

9.2 token

基于 token 令牌的身份验证允许你将身份验证系统与 registry 分离。这是一个高度安全的认证范例。

参数是否必须描述
realm注册表服务器进行身份验证的 realm (领域)。
service进行身份验证的服务。
issuertoken 令牌发行者的名称。发行者将其插入令牌,因此它必须匹配为发行者配置的值(The issuer inserts this into the token so it must match the value configured for the issuer)。
rootcertbundle根证书包的绝对路径。该捆绑包(bundle)包含用于签署认证令牌的证书的公共部分。

有关基于令牌的认证配置的更多信息,请参阅 规范

9.3 htpasswd

支持的 htpasswd 认证允许使用 Apache htpasswd 文件 配置基本认证。唯一支持的密码格式是 bcrypt。其他散列类型的条目将被忽略。htpasswd文件在启动时加载一次。如果文件无效,registry 将显示错误并且不会启动。

警告:由于基本身份验证将密码作为 HTTP header 的一部分发送,因此只能使用配置了 TLS 的 htpasswd 身份验证方案。

参数是否必须描述
realm注册表服务器进行身份验证的 realm (领域)。
path启动时加载的 htpasswd 文件的路径。

10. middleware

middleware 部分是可选的。使用此选项在指定的 hook point 处注入中间件。每个中间件都必须实现与它所包装的对象相同的接口。例如,registry 中间件必须实现 distribution.Namespace 接口,repository 中间件必须实现distribution.Repository,而 storage 中间件必须实现 driver.StorageDriver

这是 cloudfront 中间件(存储中间件)的示例配置:

middleware:
  registry:
    - name: ARegistryMiddleware
      options:
        foo: bar
  repository:
    - name: ARepositoryMiddleware
      options:
        foo: bar
  storage:
    - name: cloudfront
      options:
        baseurl: https://my.cloudfronted.domain.com/
        privatekey: /path/to/pem
        keypairid: cloudfrontkeypairid
        duration: 3000s

每个中间件条目都有 nameoptions 条目。该 name 必须与中间件 registry 自身的名称相对应。options 字段是一个映射,用于详细说明初始化中间件所需的自定义配置。它被视为一个 map[string]interface{}。因此,它支持所需的任何有趣的结构,将其留给中间件初始化函数以最好地确定如何处理选项的特定解释(As such, it supports any interesting structures desired, leaving it up to the middleware initialization function to best determine how to handle the specific interpretation of the options.)。

10.1 cloudfront

参数是否必须描述
baseurlSCHEME://HOST[/PATH],Cloudfront 提供服务的 url。
privatekeyCloudfront 的私钥,由 AWS 提供。
keypairid由 AWS 提供的 key pair ID。
durationCloudfront 会话持续时间,由整数和单位组成。有效时间单位是ns,us(或μs),ms,s,m 或 h。例如,3000s 是有效的,但 3000 s 不是。如果不指定持续时间或者指定一个没有时间单位的整数,则持续时间默认为20m(20分钟)。

10.2 redirect

可以使用重定向存储中间件为 S3 存储驱动程序存储的层的代理位置指定自定义 URL(You can use the redirect storage middleware to specify a custom URL to a location of a proxy for the layer stored by the S3 storage driver)。

参数是否必须描述
baseurlSCHEME://HOST,层的保存位置。例如,https://example.com:5443

11. reporting

reporting:
  bugsnag:
    apikey: bugsnagapikey
    releasestage: bugsnagreleasestage
    endpoint: bugsnagendpoint
  newrelic:
    licensekey: newreliclicensekey
    name: newrelicname
    verbose: true

reporting 选项是可选的,并配置错误和指标报告工具。目前只支持两种服务:

  • Bugsnag
  • New Relic

有效的配置可以同时包含这两个服务。

11.1 bugsnag

参数是否必须描述
apikey由 Bugsnag 提供的 API Key。
releasestage跟踪部署 registry 的位置,使用像 productionstagingdevelopment 这样的字符串。
endpoint企业 Bugsnag 端点(The enterprise Bugsnag endpoint)。

11.2 newrelic

参数是否必须 描述
licensekey
name
verbose

12. http

http:
  addr: localhost:5000
  net: tcp
  prefix: /my/nested/registry/
  host: https://myregistryaddress.org:5000
  secret: asecretforlocaldevelopment
  relativeurls: false
  tls:
    certificate: /path/to/x509/public
    key: /path/to/x509/private
    clientcas:
      - /path/to/ca.pem
      - /path/to/another/ca.pem
    letsencrypt:
      cachefile: /path/to/cache-file
      email: emailused@letsencrypt.com
  debug:
    addr: localhost:5001
  headers:
    X-Content-Type-Options: [nosniff]
  http2:
    disabled: false

http 选项详细配置了 registry 所在的 HTTP 服务器。

参数是否必须描述
addr服务器应该接受连接的地址。格式取决于网络类型(参考 net 选项)。对于 TCP 套接字使用 HOST:PORT,对于 UNIX 套接字使用 FILE
net用于创建侦听套接字的网络。可以使用 unixtcp
prefix如果服务器未在根路径上运行,用这个参数设置前缀的值。根路径是 v2 之前的部分。它需要前斜杠和后斜线,例如 /path/
hostregistry 的外部可达地址的完全限定 URL。如果存在,则在创建生成的URL时使用(A fully-qualified URL for an externally-reachable address for the registry. If present, it is used when creating generated URLs)。否则,这些 URL 从客户端请求派生。
secret用于签署状态的随机数据,可与客户端一起存储以防止篡改。对于生产环境,应该使用密码安全的随机生成器生成随机数据。如果省略 secret,registry 将在启动时自动生成一个 secret。如果要在负载均衡器后面建立一个 registry 集群,必须确保所有 registry 的 secret 都一样。
relativeurls如果为 true,则 registry 将返回 Location header 中的相对 URL。客户端负责解析正确的 URL。该选项与 Docker 1.7 及更早版本不兼容。

12.1 tls

http 中的 tls 选项是可选的,用于配置服务器的 TLS。如果在 registry 所在主机上已经运行了一个 web 服务器,则最好为 web 服务器配置 TLS 并代理到 registry 服务器的连接。

参数是否必须描述
certificatex509 证书文件(certificate file)的绝对路径。
keyx509 私钥文件(private key file)的绝对路径。
clientcasx509 CA 文件的绝对路径的数组。

12.2 letsencrypt

tls 中的 letsencrypt 是可选的,用于配置由 Let’s Encrypt 提供的 TLS 证书。

注意:使用 Let’s Encrypt 时,请确保端口 443 可从外部访问。registry 默认侦听端口 5000。如果将 registry 作为容器运行,请考虑将标志 -p 443:5000 添加到 docker run 命令或在云配置中使用类似的设置。

参数是否必须描述
cachefileLet’s Encrypt 客户端可以缓存数据的绝对路径。
email用于注册 Let’s Encrypt 的电子邮件地址。

12.3 debug

debug 选项是可选的,用于配置可以帮助诊断问题的调试服务器。调试端点可用于监控 registry 指标和运行状况以及性能分析。敏感信息可能通过调试端点提供。请确保访问调试端点的权限在生产环境中被锁定。

debug 部分采用一个必需的 addr 参数,该参数指定调试服务器应该接受来自哪个 HOST:PORT 的连接。

12.4 headers

headers 选项是可选的,用来指定 HTTP 服务器应该包含在响应中的 header。这可以用于安全头如 Strict-Transport-Security

headers 选项应该包含每个 header 包含的选项,其中参数名称是 header 名称,参数值是 header 的有效负载值列表。(The headers option should contain an option for each header to include, where the parameter name is the header’s name, and the parameter value a list of the header’s payload values)

推荐包括 X-Content-Type-Options: [nosniff],以便浏览器不会将内容解释为 HTML,如果它们被指示从 registry 中加载页面。该头文件包含在示例配置文件中。

12.5 http2

http 中的 http2 选项是可选的,用于控制 registry 的 HTTP2 设置。

参数是否必须描述
disabled如果是 true,则关闭 HTTP2 支持。

13. notifications

notifications:
  endpoints:
    - name: alistener
      disabled: false
      url: https://my.listener.com/event
      headers: <http.Header>
      timeout: 500
      threshold: 5
      backoff: 1000
      ignoredmediatypes:
        - application/octet-stream

notifications 选项是可选的,目前可能包含一个选项 endpoints

13.1 endpoints

endpoints 结构包含一个命名过的服务(URL)的列表,可以接受事件通知。

参数是否必须描述
name可读的服务名
disabled如果是 true,禁止向服务发送通知。
url事件发布到该 URL。
headers要添加到每个请求的静态 header 列表。每个 header 的名称是 header 下的关键字,每个值都是该标题名称的有效负载列表(Each header’s name is a key beneath headers, and each value is a list of payloads for that header name)。值必须始终为列表。
timeoutHTTP 超时的值。表示时间的正整数和可选的单位后缀,可以是 ns,us,ms,s,m 或 h。如果省略时间单位,则使用 ns。
threshold一个整数,指定在退出故障之前等待多久。
backoff系统在发生故障后重试之前需要等待多久。表示时间单位的正整数和可选后缀,可以是 ns,us,ms,s,m 或 h。如果省略时间单位,则使用ns。
ignoredmediatypes要忽略的目标媒体类型列表。这些目标媒体类型的事件不会发布到端点。

14. redis

redis:
  addr: localhost:6379
  password: asecret
  db: 0
  dialtimeout: 10ms
  readtimeout: 10ms
  writetimeout: 10ms
  pool:
    maxidle: 16
    maxactive: 64
    idletimeout: 300s

声明构建 redis 连接的参数。registry 实例可以将 Redis 实例用于多个应用程序。目前,它缓存有关不可变 blob 的信息。大多数 redis 选项控制 registry 如何连接到 redis 实例。要控制 pool 的行为可以参考下一小节 pool。

应该使用 allkeys-lru 策略(allkeys-lru eviction policy)来配置 Redis,因为 registry 不会在密钥上设置过期值。

参数是否必须描述
addrRedis 实例的地址(主机和端口)。
password用于 Redis 实例认证的密码。
db用于每个连接的数据库名。
dialtimeout连接到 Redis 实例的超时时间。
readtimeout从 Redis 实例的读操作超时时间。
writetimeout向 Redis 实例的写操作超时时间。

14.1 pool

pool:
  maxidle: 16
  maxactive: 64
  idletimeout: 300s

这些设置用于配置 Redis 连接池的表现。

超时是否必须描述
maxidle连接池中的最大空闲连接数。
maxactive在阻止连接请求之前可以打开的最大连接数。
idletimeout关闭不活动的连接之前的等待时间。

15. health

health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
  file:
    - file: /path/to/checked/file
      interval: 10s
  http:
    - uri: http://server.to.check/must/return/200
      headers:
        Authorization: [Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==]
      statuscode: 200
      timeout: 3s
      interval: 10s
      threshold: 3
  tcp:
    - addr: redis-server.domain.com:6379
      timeout: 3s
      interval: 10s
      threshold: 3

health 选项是可选的,包含用于定期对存储驱动程序后端存储进行健康状况检查的首选项,以及对本地文件,HTTP URI 和 TCP 服务器的定期检查选项。如果启用了调试 HTTP 服务器,则可以在调试 HTTP 服务器上的 /debug/health 端点上使用健康检查的结果(请参阅 http 部分)。

15.1 storagedriver

storagedriver 结构包含用于对配置的存储驱动程序的后端存储进行运行状况检查的选项。只有在 enabled 设置为 true 时,健康检查才会激活。

超时是否必须描述
enabled设置为 true 以启用存储驱动程序的状况检查,设置为 false 则禁用。
interval存储驱动程序运行两次状况检查之间需要等待多长时间。一个正整数和一个可选的时间单位后缀。后缀是 ns,us,ms,s,m 或 h。如果该值被省略,则默认为 10 秒。如果指定了一个值但省略了后缀,则该值将被解释为一个纳秒数。
threshold正整数,表示在状态标记为不健康之前必须失败的检查次数。如果没有指定,则一次故障就会使标志变为不健康状态。

15.2 file

file 结构包括一个要定期检查文件是否存在的路径列表。如果文件存在于给定路径中,则运行状况检查将失败。可以使用此机制通过创建文件来使 registry 脱离轮换(You can use this mechanism to bring a registry out of rotation by creating a file)。

参数是否必须描述
file在这个路径上检查文件是否存在。
interval重复检查的间隔时间。一个正整数和一个可选的时间单位后缀。后缀是 ns,us,ms,s,m 或 h 中的一个。如果该值被省略,则默认为 10 秒。

15.3 http

http 结构包含一个 HTTP URI 列表,用于定期检查 HEAD 请求。如果 HEAD 请求未完成或返回非预期状态码,则状况检查将失败。

参数是否必须描述
uri要检查的 URI。
headers要添加到每个请求的静态 header。每个 header 的名称是 header 下的关键字,每个值都是该 header 名称的有效负载列表(Each header’s name is a key beneath headers, and each value is a list of payloads for that header name)。值必须始终为列表。
statuscode来自 HTTP URI 的预期状态码。默认为 200。
timeout在 HTTP 请求超时之前等多久。一个正整数和一个可选的时间单位后缀。后缀是 ns,us,ms,s,m 或 h。如果指定了一个值但省略了后缀,则该值将被解释为一个纳秒数。
interval两次检查之间的间隔。一个正整数和一个可选的时间单位后缀。后缀是 ns,us,ms,s,m 或 h。如果该值被省略,则默认为 10 秒。如果指定了一个值但省略了后缀,则该值将被解释为一个纳秒数。
threshold在状态标记为不健康之前失败检查必须达到的次数。如果未指定此字段,则一次故障就会将状态标记为不健康。

15.4 tcp

tcp 结构包含一个 TCP 地址列表,用于定期使用 TCP 连接进行检查。地址必须包含端口号。如果连接尝试失败,健康检查将失败。

参数是否必须描述
addr要连接到的 TCP 地址和端口。
timeoutTCP 连接超时时间。一个正整数和一个可选的时间单位后缀。后缀是 ns,us,ms,s,m 或 h。如果指定了一个值但省略了后缀,则该值将被解释为一个纳秒数。
interval两次检查之间的间隔。一个正整数和一个可选的时间单位后缀。后缀是 ns,us,ms,s,m 或 h。如果该值被省略,则默认为 10 秒。如果指定了一个值但省略了后缀,则该值将被解释为一个纳秒数。
threshold在状态标记为不健康之前失败检查必须达到的次数。如果未指定此字段,则一次故障就会将状态标记为不健康。

16. proxy

proxy:
  remoteurl: https://registry-1.docker.io
  username: [username]
  password: [password]

proxy 结构允许将 registry 配置为 Docker Hub 的直通缓存(a pull-through cache)。更多信息请参阅 镜像。不支持向配置为直通式高速缓存的 registry 的 push 操作。

参数是否必须描述
remoteurlDocker Hub 上的仓库的 URL。
username注册到可访问仓库的 Docker Hub 的用户名。
password用于使用 username 中指定的用户名对 Docker Hub 进行身份验证的密码。

要启用私人仓库(例如 batman/robin),请指定用户名(例如 batman)和该用户名的密码。

注意:这些私人仓库存储在代理缓存的存储中。采取适当措施保护对代理缓存的访问。

17. compatibility

compatibility:
  schema1:
    signingkeyfile: /etc/registry/key.json

使用 compatibility 结构来配置处理旧的和弃用的功能。每个小节都定义了这种具有可配置行为的功能。

17.1 schema1

参数是否必须描述
signingkeyfile用于向 schema1 清单添加签名的签名私钥。如果未提供签名密钥,则在 registry 启动时会生成新的 ECDSA 密钥。

18. validation

validation:
  enabled: true
  manifests:
    urls:
      allow:
        - ^https?://([^/]+\.)*example\.com/
      deny:
        - ^https?://www\.example\.com/

18.1 enabled

使用 enabled 标志启用 validation 部分中的其他选项。它们默认是禁用的。

18.2 manifests

使用 manifest 子部分来配置清单验证。

URLS

allowdeny 选项每个都是限制推送清单中的URL的 正则表达式列表。

如果没有设置 allow,向清单中包含的 URL 进行 push 操作会失败。

如果设置了 allow,则只有在所有 URL 匹配其中一个允许的正则表达式并且以下情况之一成立时才 push manifest:

  1. 没设置 deny
  2. deny 设置了但是 manifest 清单中没有 URL 匹配 deny 正则表达式

19. 示例:部署配置

以下示例可以用于本地配置:

version: 0.1
log:
  level: debug
storage:
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: localhost:5000
    secret: asecretforlocaldevelopment
    debug:
        addr: localhost:5001

本示例将 registry 实例配置为在端口 5000 上运行,绑定到 localhost,并启用调试服务器。registry 数据存储在 /var/lib/registry 目录中。日志记录被设置为调试模式,这是最详细的。

有关其他简单配置,请参阅 config-example.yml。这两个例子通常对本地开发很有用。

20. 示例:中间件配置

本示例将 Amazon Cloudfront 配置为注册表中的存储中间件。中间件允许 registry 通过内容交付网络(CDN)提供服务。这减少了对存储层的请求。

Cloudfront需要S3存储驱动程序。

这是YAML中的配置:
Cloudfront requires the S3 storage driver.

This is the configuration expressed in YAML:

middleware:
  storage:
  - name: cloudfront
    disabled: false
    options:
      baseurl: http://d111111abcdef8.cloudfront.net
      privatekey: /path/to/asecret.pem
      keypairid: asecret
      duration: 60

有关配置选项的更多信息,请参阅 Cloudfront 的配置参考。

注意:Cloudfront 密钥与其他 AWS 密钥分开存在。有关更多信息,请参阅 AWS 凭证上的文档

dial tcp:lookup registry-1.docker.io 这个错误通常表示的是访问注册表(Registry) 时出现了连接问题或者 DNS 解析问题。Docker 是一种开源的容器化引擎,它可以在 Linux、Windows 和 macOS 等不同的操作系统上运行,能够将应用程序及其依赖打包成可移植的容器来简化应用部署。Docker 中的镜像(Image) 是容器的基础模板,其存储在 Docker 的注册表中,当运行一个容器时,Docker 引擎会自动从注册表下载相应的镜像。所以如果出现了 dial tcp:lookup registry-1.docker.io 错误,那么我们无法下载镜像,也就无法运行容器。 造成 dial tcp:lookup registry-1.docker.io 错误的原因可能有很多,可能是网络不稳定、DNS 解析问题、代理问题以及操作系统配置等。解决这种错误的方法也有很多,可以尝试更改 DNS 解析设置、切换到稳定的网络,或者禁用代理等措施。一些解决方法如下: 1. 修改 DNS 设置。一些情况下 DNS 缓存造成了问题,需清除 DNS 缓存,重新解析。另外,有时候也可以修改本地的 DNS 设置,在/etc/resolv.conf 文件中添加 Google 的 DNS 8.8.8.8 即可。命令为: echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null 2. 检查网络连接。首先确定本地的网络连接是否正常。可以使用 ping 命令检测 DNS 是否正常解析,然后再尝试连接 Docker 服务器。如果是代理的问题,尝试关闭代理,再重试一下。 3. 更新操作系统。检查操作系统是否需要更新,特别是针对网络连接方面。 4. 更换 Docker 镜像源。由于网络原因,国内镜像源可能无法正常访问,所以可以尝试更改 Docker 镜像源为国外的源,比如 Docker 官方的镜像源等。 总之,如何解决 dial tcp:lookup registry-1.docker.io 错误是需要具体情况具体分析,解决方法也可能因具体情况而异,需要根据错误提示和具体问题来进行判断和解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值