除了一些 Node.js 应用程序之外,我还有一个由 ubuntu、nginx-proxy 和 acme-companion 提供服务的自托管 docker 注册表。注册表的基本身份验证是使用
htpasswd
设置的。如果我尝试导航到根域,例如 https://myregistry.com,则不需要身份验证。如果尝试打开 https://myregistry.com/v2 或 https://myregistry.com/v2/_catalog,则需要进行身份验证。这是预期的吗?如果不是,我该如何查明发生这种情况的原因?
由于身份验证在
/v2
和 /v2/_catalog
路径上成功(和失败),我假设凭据和 htpasswd 文件 + 位置是有效的。
# compose-registry.yml
version: '3.8'
services:
registry.mydomain.com:
image: registry:2.8
platform: linux/amd64
container_name: registry.mydomain.com
restart: always
expose:
- 5000
depends_on:
- nginx-proxy
- acme-companion
environment:
VIRTUAL_HOST: registry.mydomain.com
LETSENCRYPT_HOST: registry.mydomain.com
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
REGISTRY_AUTH: 'htpasswd'
REGISTRY_AUTH_HTPASSWD_REALM: 'basic-realm'
REGISTRY_AUTH_HTPASSWD_PATH: '/auth/registry.mydomain.com'
volumes:
- data:/data
- /home/lala/docker-registry/auth:/auth
networks:
- registry
volumes:
data:
networks:
registry:
OCI distribution-spec 未指定 /
端点的任何行为,仅指定
/v2/
及以下端点的行为。因此,OCI 注册机构可以按照他们希望的方式自由处理该端点。分发项目的行为将与他们如何在 Go 中定义路由器/复用器相关,但我没有花足够的时间挖掘他们的代码来找到行为差异的具体位置。如果您希望您的应用程序可移植到其他注册表,我会避免使用未定义的端点并坚持使用
/v2/
。