Назад | Перейти на главную страницу

Невозможно использовать реестр Nexus Docker в Docker Swarm

Я пытаюсь настроить репозиторий Nexus для использования Docker Swarm. Однако я наблюдаю какое-то странное поведение, и я не уверен, что это то, что я сделал, или это ошибка, потому что, похоже, она присутствует с 3.12 (это первая версия, в которой было хранилище BLOB-объектов S3, так что это был первый раз Я использовал Nexus)

Я наблюдаю за поведением docker pull работает, но когда я делаю docker swarm deploy он говорит, что изображение недоступно. У меня нет проблем с registry:2 образ.

Вот результат docker pull что показывает, что он работает успешно. Это также означает, что я правильно прошел аутентификацию.

$ sudo docker pull repo.devhaus.com/mylj-api:latest
latest: Pulling from mylj-api
Digest: sha256:e6ca3333cbe6d8c1761b2af2548610b068e1a268dac437598fb76a5b4102f9eb
Status: Downloaded newer image for repo.devhaus.com/mylj-api:latest

В docker-compose.yml файл, используемый для развертывания,

version: '3.4'
services:
  apidoc:
     image: repo.devhaus.com/mylj-api

Однако, когда я попытался развернуть, я получил

$ sudo docker stack deploy apidoc -c apidoc.yml --with-registry-auth --prune
Updating service apidoc_apidoc (id: odj2sgw8zugthjfk4jom1erms)
image repo.devhaus.com/mylj-api:latest could not be accessed on a registry to record
its digest. Each node will access repo.devhaus.com/mylj-api:latest independently,
possibly leading to different nodes running different
versions of the image.

Я также попытался дать пользователям nx-admin права, которые им на самом деле не следует делать, потому что все, что им нужно делать, это читать из репозитория, а не писать.

В /var/log/messages следующее появляется на docker stack deploy но не в docker pull

Oct 17 01:25:59 ip-10-70-1-11 dockerd: time="2018-10-17T01:25:59.853065022Z" level=error msg="Handler for GET /v1.38/distribution/repo.devhaus.com/mylj-api:latest/json returned error: missing or empty Content-Length header"

Я думаю что docker stack deploy может делать HEAD запрос.

Следующие работы:

curl --user XXXX:YYYY https://repo.devhaus.com/v2/mylj-api/manifests/latest 

Следующее, что в основном HEAD эквивалент запроса дает 404:

curl -I --user XXXX:YYYY https://repo.devhaus.com/v2/mylj-api/manifests/latest does not and gives a 404

Я также подтвердил, что это не проблема прокси, поскольку я напрямую подключился к открытому порту и дал те же результаты, что и выше.

По-видимому, это ошибка в Nexus с версии 3.2.0 с марта 2017 года (так что ей больше года) https://issues.sonatype.org/browse/NEXUS-12684 Думаю, нам нужно найти альтернативную систему репозиториев, поддерживающую Docker.

Или в качестве временного решения я создал простой прокси-сервер, который позволяет неправильно построенным серверам поддерживать HEAD запрос. https://hub.docker.com/r/trajano/fakehead/