在私有 docker 注册表中运行搜索命令时出现身份验证问题

在私有 docker 注册表中运行搜索命令时出现身份验证问题

我正在使用官方镜像设置私有 Docker 注册表。我已使用以下 docker-compose 文件启动了一个实例:


registry:
  restart: always
  image: registry:2.3.1
  ports:
    - 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    SEARCH_BACKEND: sqlalchemy
    SQLALCHEMY_INDEX_DATABASE: sqlite:////opt/sqlitedb/reg.db
  volumes:
    - /docker/registry/data:/var/lib/registry
    - /docker/registry/certs:/certs
    - /docker/registry/auth:/auth
    - /docker/registry/search:/opt/sqlitedb

我可以正常登录:

root@domain:/home/foo#docker loginregistry.domain.com:5000
用户名(foo):foo
密码:
警告:登录凭据保存在 /root/.docker/config.json 中
登录成功

我可以毫无问题地将图像推送到私人注册表:

root@domain:/home/foo#docker 标签 hello-worldregistry.domain.com:5000/hello-world
root@domain:/home/foo#docker push registry.domain.com:5000/hello-world
推送指向存储库 [registry.domain.com:5000/hello-world]
5f70bf18a086:图层已存在
b652ec3a27e7:层已存在
最新:摘要:sha256:fea8895f450959fa676bcc1df0611ea93823a735a01205fd8622846041d0c7cf 大小:708

我无法做的是搜索:

root@domain:/home/foo#docker search registry.domain.com:5000/hello
守护进程的错误响应:意外状态代码 404

Docker 实例输出如下信息:

registry_1 | time="2016-04-04T22:38:59Z" level=warning msg="授权上下文错误:领域 \“Registry Realm \”的基本身份验证挑战:授权凭据无效" go.version=go1.5.3 http.request.host="registry.domain.com:5000" http.request.id=2f158656-545d-4cd0-a0a1-2d18f01843a4 http.request.method=GET http.request.remoteaddr="172.17.0.1:57196" http.request.uri="/v2/" http.request.useragent="docker/1.10.3 go/go1.5.3 git-commit/20f81dd kernel/4.2.0-27-generic os/linux arch/amd64"实例.id=cc656ad8-63a4-499e-bbde-ad797059e39e 版本=v2.3.1
registry_1 | 172.17.0.1 - - [04/Apr/2016:22:38:59 +0000] "GET /v2/HTTP/1.1" 401 87 "" "docker/1.10.3 go/go1.5.3 git-commit/20f81dd kernel/4.2.0-27-generic os/linux arch/amd64"
registry_1 | time="2016-04-04T22:38:59Z" level=warning msg="授权上下文错误:领域 \“Registry Realm\”的基本身份验证挑战:授权凭据无效" go.version=go1.5.3 http.request.host="registry.domain.com:5000" http.request.id=6dcbc494-62b9-4f32-9c70-fece7c61a90b http.request.method=GET http.request.remoteaddr="172.17.0.1:57200" http.request.uri="/v2/" http.request.useragent="docker/1.10.3 go/go1.5.3 git-commit/20f81dd kernel/4.2.0-27-generic os/linux arch/amd64"实例.id=cc656ad8-63a4-499e-bbde-ad797059e39e 版本=v2.3.1
registry_1 | 172.17.0.1 - - [04/Apr/2016:22:38:59 +0000] "GET /v2/HTTP/1.1" 401 87 "" "docker/1.10.3 go/go1.5.3 git-commit/20f81dd kernel/4.2.0-27-generic os/linux arch/amd64"
registry_1 | 172.17.0.1 - - [04/Apr/2016:22:38:59 +0000] "GET /v1/search?q=hellow HTTP/1.1" 404 19 "" "docker/1.10.3 go/go1.5.3 git-commit/20f81dd kernel/4.2.0-27-generic os/linux arch/amd64"

我花了几个小时研究这个问题。404 指向未部署索引服务 sqlalchemy。在查看了最新版本的注册表配置参考,似乎搜索后端部分不再有效。因此,也许我的 docker-compose 文件上的 SEARCH_BACKEND 环境变量被忽略,并且未完成索引(/opt/sqlitedb 文件夹为空)。

另一方面,该错误表明这是一个身份验证问题。

也许问题在于注册表的 v1 和 v2 之间的差异。我以前没有使用注册表的经验,所以我认为我在这里遗漏了一些东西。我需要做什么才能使 docker search 在我的私有注册表上运行?

谢谢!

答案1

请尝试curl-

curl -X GET http://localhost:5001/v1/search?q=image_name

它将为您提供 json 格式的结果。

请查看旧帖子如何从私人注册中心搜索图像?

相关内容