Канико не может авторизоваться в Nexus OSS

Мы столкнулись с проблемой, из-за которой мы не можем отправить образы Docker в наш реестр Nexus с помощью kaniko. Ниже я предоставил минимальный репродукция, которую мы используем Nexus OSS 3.49.0-02.

Это приводит к ошибке 404 с использованием неправильного шаблона URL-адреса для доступа к Dockerapi v2:

error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try
again: checking push permission for "private.registry.com/repository/imagename:tag": creating push check transport for 
private.registry.com failed: GET https://private.registry.com/v2/: unexpected status code 404 Not Found: 
...[html]...

Наша часть сценария Gitlab-CI выглядит так:

- echo "{\"auths\":{\"private.registry.com":{\"auth\":\"$NEXUS_DEPLOY_USER_PW_BASE64\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor
      --context "${CI_PROJECT_DIR}/frontend"
      --dockerfile "${CI_PROJECT_DIR}/frontend/Dockerfile.app-builder"
      --build-arg=CI_COMMIT_SHA=$CI_COMMIT_SHA
      --build-arg=CI_COMMIT_BRANCH=$CI_COMMIT_BRANCH
      --build-arg=CI_COMMIT_TAG=$CI_COMMIT_TAG
      --destination "$BASE_URL/app-ui:$APP_VERSION"
      --destination "$BASE_URL/app-ui:$BRANCH_TAG"
      --destination "$BASE_URL/app-ui"

Он также не работает с учетными данными, не закодированными в Base64 NEXUS_DEPLOY_USER_PW_BASE64. Поэтому в примере воспроизведения я предоставил аутентификацию, отличную от Base64.

Репродукция:

Докерфайл

FROM gcr.io/kaniko-project/executor:v1.14.0-debug

ADD Dockerfile.test Dockerfile.test

ARG REGISTRY_URL=[YOUR_NEXUS_URL]/repository/dockercontainer
ARG REGISTRY_USER=[your credential]
ARG REGISTRY_PASSWORD=[your credential]

RUN echo "{\"auths\":{\"$REGISTRY_URL\":{\"username\":\"$REGISTRY_USER\",\"password\":\"$REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json

RUN /kaniko/executor --context "." --dockerfile "Dockerfile.test" --destination "${REGISTRY_URL}/test:latest"

CMD [ "echo", "Hello World" ]

Dockerfile.test

FROM alpine:latest
CMD [ "echo", "Hello World" ]

Структура папок

В директории kaniko запустите docker build .

kaniko
  |__ Dockerfile
  |__ Dockerfile.test

Не забудьте отметить флагом -t свое изображение. docker build -t {image-name}:{tag} .

Chachatonel Hashimotto 05.04.2024 21:16

это репродукция. Ваш комментарий не имеет никакого смысла :D

KhaosTheory 08.04.2024 13:44
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
2
286
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Именно этот случай описан в официальной документации.

Невозможно предоставить клиенту Docker путь к контексту приложения или путь к базовому реестру. Docker нужен реестр, открытый в корне хоста + порт, к которому он обращается.

Ознакомьтесь с стратегиями обратного прокси для получения рекомендаций, но обычно они сводятся к следующему:

  1. Укажите порт http или https для вашего репозитория в nexus, т. е. как http-порт 8081.
  2. Используйте в kaniko как есть, то есть как private.registry.com:8091/imagename:tag
  3. (Или) Настройте обратный прокси-сервер для перенаправления запросов с repository.private.registry.com на private.registry.com:8091, а затем используйте repository.private.registry.com/imagename:tag в kaniko.

Немного не по теме, но вы также можете избавиться от Нексуса и использовать вместо него Harbour, который поддерживает сценарий private.registry.com/repository/imagename:tag из коробки.

Другие вопросы по теме