← Назад к списку
Железо и софт • 06.06.2026

Kubernetes выдает ошибку ErrImagePull и ImagePullBackOff для локального образа как исправить

Разворачиваю манифест приложения в локальном кластере Kubernetes (minikube) на Windows 11. При проверке статуса подов через kubectl get pods вижу, что контейнер зависает в бесконечной ошибке ErrImagePull или ImagePullBackOff. В логах описания пода (kubectl describe pod) выводится критический лог: «Failed to pull image: rpc error: code = Unknown desc = failed to resolve image reference: Pull access denied». При этом сам докер-образ собран локально и присутствует в списке Docker Desktop, а интернет работает стабильно. Подскажите, почему виртуальный кластер Кубера не видит локальные образы, из-за чего рвется мост авторизации реестра и как исправить этот сбой?

Ответы (5)

Артем Девопс
Здорово! Ошибка "ErrImagePull" при работе с локальными образами — это классическое непонимание изоляции сред контейнеризации. Твой локальный терминал Windows и Docker Desktop используют один демон и одно хранилище образов. А утилита Minikube под капотом разворачивает изолированную виртуальную машину со своим собственным, независимым внутренним Докером. Когда ты пишешь в манифесте yaml имя своего локального образа, Кубер понятия не имеет о твоем основном хранилище Windows, пытается скачать этот образ из внешнего публичного реестра Docker Hub, получает логичный отказ доступа "access denied" и намертво вешает под.
Марина Кент
Чтобы заставить ваш терминал собирать докер-образы напрямую внутрь изолированной виртуальной машины кластера Кубернетис, перенаправьте сетевые мосты окружения строго по шагам:
1. Откройте стандартную консоль PowerShell или командную строку Windows от имени администратора.
2. Введите специальную команду, которая выведет переменные среды для подключения к внутреннему демону: `minikube docker-env`.
3. Скопируйте и запустите финальную строку-инструкцию, которую сгенерировала утилита для вашей консоли, например: `& minikube -p minikube docker-env | Invoke-Expression`.
4. Теперь, не закрывая это окно терминала, запустите сборку вашего образа заново: `docker build -t my-app:latest .`.
5. Образ запишется напрямую в память кластера. Примените ваш манифест `kubectl apply -f deployment.yaml` — поды запустятся без сетевых ошибок.
Дмитрий Стек
Ребята, обязательно проверяйте один скрытый параметр внутри вашего файла конфигурации `deployment.yaml`. Ошибка ImagePullBackOff намертво зависает, если у вас для контейнера задан тег `:latest` или вообще не прописана строка `imagePullPolicy`. По умолчанию Кубернетис в таких случаях применяет политику `Always`, то есть при каждом старте пода он обязан принудительно лезть в интернет и сверять хэш-суммы образа с реестром. Измените это поведение в yaml, жестко прописав строчку `imagePullPolicy: Never` или `Never`, чтобы узел брал файлы исключительно из локального кэша памяти.
Никита Поды
Если вам неохота постоянно переключать контексты докер-демона в разных окнах консоли PowerShell, можно физически закинуть уже собранный в Windows образ внутрь виртуальной машины кластера. Соберите файл как обычно в Docker Desktop, а затем введите встроенную команду импорта: `minikube image load имя_образа:тег` (или воспользуйтесь старой альтернативой `minikube cache add ...`). Утилита перепишет бинарные пакеты на внутренний диск ноды, и ошибка ErrImagePull пропадет.
Роман Кьюб
Если ваш образ лежит не локально, а в защищенном приватном реестре (например, GitLab Registry или закрытом Docker Hub), то под падает, потому что у нод кластера нет токенов авторизации. Настройте мост безопасности по инструкции:
1. Создайте секрет авторизации в вашем пространстве имен, прописав в консоли команду: `kubectl create secret docker-registry my-registry-key --docker-server=адрес --docker-username=логин --docker-password=пароль`.
2. Откройте ваш рабочий конфигурационный файл манифеста `deployment.yaml` в текстовом редакторе.
3. В блоке описания спецификации пода `spec:` на одном уровне с массивом `containers:` добавьте новую строку.
4. Пропишите ссылку на созданный токен: `imagePullSecrets:` строкой ниже `- name: my-registry-key`.
5. Сохраните изменения и обновите конфигурацию командой `kubectl apply -f` — скачивание контейнеров разблокируется.

Ваш ответ