Я пытаюсь извлечь образ докера из моего реестра контейнеров Gitlab, используя singularity pull
(так как я хочу использовать его сингулярность), но я получаю сообщение об ошибке, сообщающее мне, что один файл не является tar-архивом.
Действительно, этот файл содержит <?xml version='1.0' encoding='UTF-8'?><Error><Code>AuthenticationRequired</Code><Message>Authentication required.</Message></Error>
.
Работающая команда: docker pull registry.gitlab.com/uit-sfb/metapipe/preprocess-reads:master
.
Команда, которая не работает: singularity pull docker://registry.gitlab.com/uit-sfb/metapipe/preprocess-reads:master
Дело в том, что мой репозиторий публичный и доступ к нему есть у всех. Так чего мне не хватает??
У вас должна быть возможность создать образ Singularity из образа Docker, размещенного в Docker Hub, с помощью:
singularity build your-image.sif docker://maintainer/image:tag
Так как это не образ, размещенный в концентраторе Docker, а в gitlab, команда сборки должна работать с адресом oras (реестр OCI как хранилище).
В вашем случае использования что-то вроде этого:
singularity pull preprocess-reads-master.sif oras://gitlab-registry/uit-sfb/metapipe/preprocess-reads:master
или это:
singularity pull preprocess-reads-master.sif oras://registry.gitlab.com/uit-sfb/metapipe/preprocess-reads:master
Я думаю, что ответ от @tsnowlan должен решить исходную проблему. Единственным другим советом по устранению неполадок будет проверка версии Docker Engine, используемой на вашем хост-компьютере, и версии, используемой для сборки образа, в реестре gitlab, чтобы убедиться, что они совместимы (например, обе созданы с помощью v2 API), как описано здесь: docs.gitlab.com/ee/user/packages/container_registry/…
После перезагрузки моей машины это сработало... Спасибо за вашу помощь.
Я могу запустить singularity pull docker://registry.gitlab.com/uit-sfb/metapipe/preprocess-reads:master
без проблем, что предполагает проблему с окружающей средой или аутентификацией. Если установлены переменные SINGULARITY_DOCKER_USERNAME
или SINGULARITY_DOCKER_PASSWORD
, сингулярность попытается использовать их для реестров докеров все. Кроме того, если вы использовали singularity remote login docker://registry.gitlab.com
с учетными данными gitlab, действительными для этого репозитория/группы, но не имеете доступа к реестру контейнеров, вы также увидите проблему аутентификации.
singularity remote list
# Cloud Services Endpoints
# ========================
#
# NAME URI ACTIVE GLOBAL EXCLUSIVE INSECURE
# SylabsCloud cloud.sylabs.io YES YES NO NO
#
# Keyservers
# ==========
#
# URI GLOBAL INSECURE ORDER
# https://keys.sylabs.io YES NO 1*
#
# * Active cloud services keyserver
#
# Authenticated Logins
# =================================
#
# URI INSECURE
# docker://registry.gitlab.com NO
#
singularity remote logout docker://registry.gitlab.com
env -i $(which singularity) pull docker://registry.gitlab.com/uit-sfb/metapipe/preprocess-reads:master
ссылка: Singularity + документация по реестрам, не относящимся к Docker
Я перезапустил свою машину, и это сработало. Как вы сказали, это, скорее всего, проблема с докером и/или версией/средой Singularity, которая была исправлена после перезапуска. Спасибо за Ваш ответ.
Я уже пробовал это, но получаю следующую ошибку:
FATAL: While pulling image from oci registry: error fetching image to cache: failed to get checksum for oras://registry.gitlab.com/uit-sfb/metapipe/preprocess-reads:master: could not get image manifest, received mediaType: application/vnd.docker.distribution.manifest.v2+json
(для второй команды).