Я пытаюсь настроить репозиторий 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/