Найти в Дзене
День-дребедень

Podman и ошибка 401 в тестовых контейнерах

Оглавление

Всем привет ! Сегодня обсудим проблему, которая у меня возникла при выполнении интеграционных тестов с использованием test containers после миграции с docker на podman.

Caused by: com.github.dockerjava.api.exception.UnauthorizedException: Status 401: {"message":"unauthorized: The client does not have permission for manifest"}

А почему собственно podman ?

Тут все просто: организация, где я работаю, сделала свой выбор в пользу podman как инструмента контейнеризации и всем сотрудникам было предложено на него мигрировать.

Ты кто такой ?

Сам процесс миграции описывать не буду, он довольно тривиальный, да и на сайте podman все довольно подробно описано. Проблемы начались при выполнении интеграционных тестов. Тестовые контейнеры ни в какую не хотели скачиваться, ругаясь:

Caused by: com.github.dockerjava.api.exception.UnauthorizedException: Status 401: {"message":"unauthorized: The client does not have permission for manifest"}

Как говорится: "Ты кто такой ? Давай, досвидания!"

В чем же причина ?

Думаю пытливый читатель и сам понял, что при выполнении интеграционного теста podman не хватает логина и пароля для авторизации на ресурсе. Ну что же, будем решать!

Варинат номер раз.

Выполнить команду

podman login <путь к ресурсу>

Если вы родились под счастливой звездой и простой login решил все (ну хорошо, почти все) Ваши проблемы, то я жму Вам руку, а мы же простые смертные идем к следующему варианту.

Вариант номер два.

Принудительно скачать все образы, используемые в интеграционных тестах, на машину и уже затем запускать тесты.

podman pull <путь к образу>

Вариант номер три.

Ну и для тех зануд, кто любит когда все по уму сделано.

  • Создаем (или вызываем на редактирование) файл
/Users/<имя пользователя>/.docker/config.json
  • Задаем права доступа к ресурсу с образами тестового контейнера следующим образом
{
"auths": {
"resource.to.config.io": {
"auth": "<авторизационное значение>"
}
},
"credsStore": "secretservice",
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.5 (linux)"
},
"credHelpers": {
"
resource.to.config.io": "ecr-login"
}
}

Здесь resource.to.config.io - это хост вашего ресурса

Авторизационное значение - это закодированное в base64 строка-пара

login:password

Закодировать строку в base 64 можно следующим образом

echo -n 'login:password' | base64

Ну в принципе и все. Пишите в комментариях насколько полезными, а главное рабочими оказались описанные выше варианты решения проблемы.