我正在使用官方镜像设置私有 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 格式的结果。
请查看旧帖子如何从私人注册中心搜索图像?