Ошибка 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.
Шаг 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 работает с домашней сети, но не работает в офисной — проблема почти наверняка в сетевой инфраструктуре, а не в учётных данных.
☑️ Итоговый чек-лист диагностики
⚠️ Внимание: не отключайте проверку TLS и не добавляйте реестр в список insecure-registries «на всякий случай» — это снижает безопасность и не решает проблему авторизации. Такие настройки оправданы только для локальных тестовых реестров без HTTPS.
Частые вопросы
Можно ли скачать приватный образ без docker login?
Нет. Приватные репозитории требуют аутентификации. Альтернатива — попросить владельца сделать репозиторий публичным или выдать вам токен с правом на чтение.
Почему docker login успешен, но pull всё равно отклоняется?
Авторизация и права доступа — разные вещи. Реестр вас распознал, но у учётной записи нет прав на этот репозиторий, либо токен имеет ограниченную область действия (например, только на чтение другого проекта).
Ошибка возникает только в docker-compose, а ручной pull работает. Почему?
Проверьте имя образа в файле docker-compose.yml — возможно, там указан другой тег, другой реестр или переменная окружения, которая в текущей сессии не задана и подставляет пустое значение.
Влияет ли версия Docker на эту ошибку?
Напрямую — редко, но устаревшие версии клиента могут некорректно работать с новыми схемами аутентификации отдельных реестров. Если остальные шаги не помогли, обновление Docker до актуальной версии — разумный шаг.
Что делать, если реестр корпоративный и доступ настраивал администратор?
Соберите диагностику: полный текст ошибки, имя образа, результат docker login — и передайте администратору. Это сократит время решения, так как права на репозиторий в таких системах выдаются централизованно.