Я настраиваю частный реестр 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 login registry.domain.com:5000 Username (foo): foo Password: WARNING: login credentials saved in /root/.docker/config.json Login Succeeded
Я могу без проблем отправлять изображения в частный реестр:
root@domain:/home/foo# docker tag hello-world registry.domain.com:5000/hello-world root@domain:/home/foo# docker push registry.domain.com:5000/hello-world The push refers to a repository [registry.domain.com:5000/hello-world] 5f70bf18a086: Layer already exists b652ec3a27e7: Layer already exists latest: digest: sha256:fea8895f450959fa676bcc1df0611ea93823a735a01205fd8622846041d0c7cf size: 708
Я не могу искать:
root@domain:/home/foo# docker search registry.domain.com:5000/hello Error response from daemon: Unexpected status code 404
Экземпляр докера выплевывает это:
registry_1 | time="2016-04-04T22:38:59Z" level=warning msg="error authorizing context: basic authentication challenge for realm \"Registry Realm\": invalid authorization credential" 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" instance.id=cc656ad8-63a4-499e-bbde-ad797059e39e version=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="error authorizing context: basic authentication challenge for realm \"Registry Realm\": invalid authorization credential" 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" instance.id=cc656ad8-63a4-499e-bbde-ad797059e39e version=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 не развернута. Пройдя последнюю версию справочник по конфигурации реестра, похоже, что раздел Search Backend больше не действует. Так что, возможно, переменная env SEARCH_BACKEND в моем файле docker-compose игнорируется, и индексация не выполняется (папка / opt / sqlitedb пуста).
С другой стороны, ошибка предполагает, что это проблема аутентификации.
Может проблема в различиях между v1 и v2 реестра. У меня нет предыдущего опыта работы с реестром, поэтому я думаю, что здесь что-то не хватает. Что мне нужно сделать, чтобы поиск докеров работал в моем частном реестре?
Спасибо!
Пожалуйста, попробуйте с curl
-
curl -X GET http://localhost:5001/v1/search?q=image_name
Это даст вам результат в формате json.
Пожалуйста, проверьте старый пост Как искать изображения из частного реестра?