Image failed to verify with access denied: что делать при ошибке

Ошибка image failed to verify with access denied чаще всего возникает при выполнении команды docker pull или docker-compose pull, когда Docker-демон не может подтвердить подлинность образа из-за отказа в доступе к реестру. Первое действие при такой ошибке — проверить, авторизованы ли вы в нужном реестре через docker login, и совпадает ли используемый реестр с тем, откуда тянется образ.

Проблема встречается как с приватными репозиториями на Docker Hub, так и с корпоративными реестрами вроде GitLab Container Registry, Harbor или Amazon ECR. Ниже разберём основные причины и безопасные способы диагностики, которые не требуют переустановки Docker или рискованных действий.

Почему Docker отказывает в доступе к образу

Сообщение об отказе в доступе означает, что реестр получил запрос, но отклонил его на этапе аутентификации или авторизации. Это принципиально разные ситуации: в первом случае реестр не смог вас «узнать», во втором — узнал, но у вашей учётной записи нет прав на конкретный репозиторий.

Типовые причины выглядят так:

  • 🔑 Вы не выполнили вход в реестр через docker login, а образ находится в приватном репозитории.
  • ⏳ Истёк срок действия токена доступа — особенно актуально для Amazon ECR и Google Artifact Registry, где токены живут ограниченное время.
  • 👤 Учётная запись авторизована, но не имеет прав на чтение конкретного репозитория.
  • 🏷️ Указан несуществующий тег или имя образа — некоторые реестры в ответ возвращают именно ошибку доступа, а не «not found».
  • 🌐 Запрос идёт не в тот реестр: например, образ указан без префикса и Docker ищет его на Docker Hub вместо корпоративного реестра.
⚠️ Внимание: если реестр возвращает access denied на несуществующий тег, это нормальное поведение с точки зрения безопасности — так реестр не раскрывает, какие репозитории существуют. Не спешите менять учётные данные, сначала проверьте правильность имени образа.

Шаг 1. Проверка авторизации в реестре

Начните с самого простого. Выполните вход в реестр, указав его адрес явно:

docker login registry.example.com

Для Docker Hub адрес указывать не обязательно — достаточно docker login. После ввода логина и пароля (или access token, если включена двухфакторная аутентификация) повторите команду загрузки образа.

Учтите важный нюанс: если в вашем аккаунте Docker Hub включена двухфакторная аутентификация, обычный пароль не подойдёт — нужен Personal Access Token, который создаётся в настройках безопасности аккаунта. Попытка войти с паролем в этом случае как раз и приводит к отказу в доступе.

Шаг 2. Проверка имени образа и реестра

Откройте команду, которая вызывает ошибку, и внимательно посмотрите на полное имя образа. Формат реестр/пространство/образ:тег должен совпадать с тем, что указан в документации проекта или в веб-интерфейсе реестра.

Например, имя myapp/backend:latest будет искаться на Docker Hub, а registry.example.com/myapp/backend:latest — в вашем приватном реестре. Если префикс реестра потерян, Docker обратится не туда и получит отказ. То же касается опечаток в теге: latset вместо latest на некоторых реестрах даст именно ошибку доступа.

Проверить существование образа можно через веб-интерфейс реестра — откройте репозиторий в браузере и сверьте список тегов с тем, что указан в команде или в файле docker-compose.yml.

📊 В каком окружении вы столкнулись с ошибкой access denied?
Docker Hub
Приватный корпоративный реестр
GitLab / GitHub Registry
Облачный реестр (ECR, GCR и т.п.)

Шаг 3. Диагностика токенов и сроков действия

Облачные реестры используют временные токены, и это частая скрытая причина ошибки. Для Amazon ECR авторизация выполняется через AWS CLI и действует ограниченное время — после истечения срока pull снова начнёт отклоняться. Аналогичная логика у Google Artifact Registry и Azure Container Registry: там применяются helper-утилиты или служебные учётные записи.

Общий принцип диагностики одинаков: повторно выполните команду получения токена для вашего облачного провайдера, затем повторите docker pull. Точный синтаксис команды зависит от провайдера и версии CLI, поэтому сверяйтесь с официальной документацией вашего сервиса — не копируйте команды из старых статей, формат мог измениться.

Как понять, что проблема именно в токене

Если образ скачивался раньше, а теперь внезапно перестал без изменений в конфигурации — почти наверняка истёк токен или отозваны права. Если ошибка появилась сразу при первой попытке — проверяйте имя образа и сам факт авторизации.

Шаг 4. Проверка прав доступа к репозиторию

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

Что стоит проверить в этом случае:

  • 📋 Виден ли репозиторий вам в веб-интерфейсе реестра под вашей учётной записью.
  • 🏢 Не тянете ли вы образ из организации, членом которой не являетесь.
  • 🔐 Не был ли репозиторий переведён из публичного в приватный режим.
  • 🧾 Не отозван ли ваш access token владельцем проекта.

Если репозиторий не отображается в интерфейсе, обратитесь к владельцу проекта или администратору реестра — самостоятельно эту проблему с клиентской стороны не решить.

Сводная таблица причин и решений

СимптомВероятная причинаДействие
Ошибка при первом pullНет авторизации в реестреВыполнить docker login с указанием реестра
Раньше работало, теперь нетИстёк токен доступаПовторно получить токен через CLI провайдера
Ошибка только на одном образеНет прав на репозиторий или опечатка в тегеПроверить имя и права в веб-интерфейсе
Ошибка с включённой 2FAИспользуется пароль вместо токенаСоздать Personal Access Token
Образ не находится вообщеУказан неверный реестрДобавить префикс реестра к имени образа

Если ничего не помогло: расширенная диагностика

Когда базовые шаги выполнены, а ошибка сохраняется, полезно получить больше информации от самого Docker. Попробуйте загрузить образ с явным указанием платформы или посмотрите логи Docker-демона — там иногда виден более подробный ответ реестра, включая HTTP-код и текст причины отказа.

Также проверьте сетевые факторы: корпоративный прокси, VPN или файрвол могут перехватывать запросы к реестру. Если docker pull работает с домашней сети, но не работает в офисной — проблема почти наверняка в сетевой инфраструктуре, а не в учётных данных.

☑️ Итоговый чек-лист диагностики

Выполнено: 0 / 5
⚠️ Внимание: не отключайте проверку TLS и не добавляйте реестр в список insecure-registries «на всякий случай» — это снижает безопасность и не решает проблему авторизации. Такие настройки оправданы только для локальных тестовых реестров без HTTPS.

Частые вопросы

Можно ли скачать приватный образ без docker login?

Нет. Приватные репозитории требуют аутентификации. Альтернатива — попросить владельца сделать репозиторий публичным или выдать вам токен с правом на чтение.

Почему docker login успешен, но pull всё равно отклоняется?

Авторизация и права доступа — разные вещи. Реестр вас распознал, но у учётной записи нет прав на этот репозиторий, либо токен имеет ограниченную область действия (например, только на чтение другого проекта).

Ошибка возникает только в docker-compose, а ручной pull работает. Почему?

Проверьте имя образа в файле docker-compose.yml — возможно, там указан другой тег, другой реестр или переменная окружения, которая в текущей сессии не задана и подставляет пустое значение.

Влияет ли версия Docker на эту ошибку?

Напрямую — редко, но устаревшие версии клиента могут некорректно работать с новыми схемами аутентификации отдельных реестров. Если остальные шаги не помогли, обновление Docker до актуальной версии — разумный шаг.

Что делать, если реестр корпоративный и доступ настраивал администратор?

Соберите диагностику: полный текст ошибки, имя образа, результат docker login — и передайте администратору. Это сократит время решения, так как права на репозиторий в таких системах выдаются централизованно.