[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/kubectl-imagepullbackoff":3,"mdc-lpc3ok-key":1072,"mdc-yb02ao-key":1083,"mdc-sn205q-key":1120,"mdc--4tbno0-key":1136,"mdc-6h12df-key":1151,"mdc--lc6np8-key":1174,"mdc-55jc5-key":1196,"mdc--z3og7b-key":1220,"mdc-lvr3x6-key":1251,"related-/errors/linux/kubectl-imagenotfound,/guides/linux/kubectl-describe-pod,/errors/general/docker-pull-error":1267},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":1002,"code":168,"createdAt":1003,"description":1004,"difficulty":1005,"draft":1006,"estimatedTime":1007,"extension":1008,"faq":1009,"howToSteps":1022,"howToTotalTime":1038,"image":1002,"keywords":1039,"locale":1050,"meta":1051,"navigation":1052,"path":1053,"platform":1054,"related":1055,"section":1059,"seo":1060,"severity":1005,"stem":1061,"summary":1062,"tags":1063,"twitterCreator":1002,"twitterSite":1002,"type":1070,"updatedAt":1003,"__hash__":1071},"content_ru/errors/linux/kubectl-imagepullbackoff.md","Kubectl ImagePullBackOff: причины и решение ошибки Kubernetes",[7,8,9,10],"Kubernetes 1.19+","kubectl 1.19+","Docker Engine","containerd","FixPedia Team",{"type":13,"value":14,"toc":992},"minimark",[15,20,38,67,77,81,146,150,157,312,329,333,336,427,431,434,648,652,655,806,809,813,816,923,927,988],[16,17,19],"h2",{"id":18},"что-означает-ошибка-imagepullbackoff","Что означает ошибка ImagePullBackOff",[21,22,23,24,28,29,32,33,37],"p",{},"Ошибка ",[25,26,27],"strong",{},"ImagePullBackOff"," — это состояние Kubernetes-пода, указывающее, что ",[25,30,31],{},"kubelet"," (агент на ноде) не смог загрузить контейнерный образ из указанного репозитория. После серии неудачных попыток kubelet входит в режим ",[34,35,36],"em",{},"BackOff",", задерживая последующие попытки, чтобы избежать бесконечных запросов и перегрузки сети.",[21,39,40,41,45,46,48,49,52,53,56,57,56,60,48,63,66],{},"В выводе ",[42,43,44],"code",{},"kubectl get pods"," вы увидите статус ",[42,47,27],{}," или ",[42,50,51],{},"ErrImagePull",". Полное сообщение в событиях (Events) обычно содержит детали: ",[42,54,55],{},"Failed to pull image",", ",[42,58,59],{},"Image not found",[42,61,62],{},"unauthorized: authentication required",[42,64,65],{},"dial tcp timeout",".",[21,68,69,70,73,74,66],{},"Эта проблема возникает на этапе ",[25,71,72],{},"создания контейнера"," и предотвращает переход пода в состояние ",[42,75,76],{},"Running",[16,78,80],{"id":79},"причины-возникновения","Причины возникновения",[82,83,84,99,105,111,121,127,140],"ol",{},[85,86,87,90,91,94,95,98],"li",{},[25,88,89],{},"Некорректное имя образа"," — опечатка в названии репозитория, образа или тега (например, ",[42,92,93],{},"docker.io/library/nginx:lates"," вместо ",[42,96,97],{},"latest",").",[85,100,101,104],{},[25,102,103],{},"Образ не существует"," — указанный тег или дайджест образа отсутствуют в репозитории (удалён или никогда не существовал).",[85,106,107,110],{},[25,108,109],{},"Проблемы с доступом к репозиторию"," — сетевая недоступность Docker Hub или приватного registry, firewall блокирует порт 443/80, DNS-проблемы.",[85,112,113,116,117,120],{},[25,114,115],{},"Отсутствие или неверные секреты"," — для приватного репозитория не указан ",[42,118,119],{},"imagePullSecrets"," или секрет содержит неверные credentials.",[85,122,123,126],{},[25,124,125],{},"Недостаток дискового пространства"," на ноде — kubelet не может сохранить временные слои образа.",[85,128,129,132,133,136,137,98],{},[25,130,131],{},"Несовместимость архитектуры"," — образ собран для другой архитектуры (например, ",[42,134,135],{},"linux/arm64","), чем у ноды (",[42,138,139],{},"linux/amd64",[85,141,142,145],{},[25,143,144],{},"Ограничения registry"," — превышен лимит запросов (rate limit) на Docker Hub для анонимных запросов.",[16,147,149],{"id":148},"способ-1-проверьте-и-исправьте-имя-образа","Способ 1: Проверьте и исправьте имя образа",[21,151,152,153,156],{},"Чаще всего проблема — в опечатке. Убедитесь, что в манифесте пода или deployment указано ",[25,154,155],{},"полное и корректное"," имя образа.",[82,158,159,227,262],{},[85,160,161,162,217,220,221,224,225,66],{},"Посмотрите события пода:",[163,164,169],"pre",{"className":165,"code":166,"language":167,"meta":168,"style":168},"language-bash shiki shiki-themes github-light github-dark","kubectl describe pod \u003Cимя_пода> | grep -A 5 Events\n","bash","",[42,170,171],{"__ignoreMap":168},[172,173,176,180,184,187,191,194,198,201,204,207,211,214],"span",{"class":174,"line":175},"line",1,[172,177,179],{"class":178},"sScJk","kubectl",[172,181,183],{"class":182},"sZZnC"," describe",[172,185,186],{"class":182}," pod",[172,188,190],{"class":189},"szBVR"," \u003C",[172,192,193],{"class":182},"имя_под",[172,195,197],{"class":196},"sVt8B","а",[172,199,200],{"class":189},">",[172,202,203],{"class":189}," |",[172,205,206],{"class":178}," grep",[172,208,210],{"class":209},"sj4cs"," -A",[172,212,213],{"class":209}," 5",[172,215,216],{"class":182}," Events\n",[218,219],"br",{},"Обратите внимание на строки ",[42,222,223],{},"Failed"," и ",[42,226,51],{},[85,228,229,230,233,234],{},"Проверьте поле ",[42,231,232],{},"Image"," в спецификации:",[163,235,237],{"className":165,"code":236,"language":167,"meta":168,"style":168},"kubectl get pod \u003Cимя_пода> -o jsonpath='{.spec.containers[0].image}'\n",[42,238,239],{"__ignoreMap":168},[172,240,241,243,246,248,250,252,254,256,259],{"class":174,"line":175},[172,242,179],{"class":178},[172,244,245],{"class":182}," get",[172,247,186],{"class":182},[172,249,190],{"class":189},[172,251,193],{"class":182},[172,253,197],{"class":196},[172,255,200],{"class":189},[172,257,258],{"class":209}," -o",[172,260,261],{"class":182}," jsonpath='{.spec.containers[0].image}'\n",[85,263,264,265,291,293,294],{},"Если имя неверное, исправьте манифест (deployment, pod, statefulset) и примените заново:",[163,266,268],{"className":165,"code":267,"language":167,"meta":168,"style":168},"kubectl edit deployment \u003Cимя_deployment>\n",[42,269,270],{"__ignoreMap":168},[172,271,272,274,277,280,282,285,288],{"class":174,"line":175},[172,273,179],{"class":178},[172,275,276],{"class":182}," edit",[172,278,279],{"class":182}," deployment",[172,281,190],{"class":189},[172,283,284],{"class":182},"имя_deploymen",[172,286,287],{"class":196},"t",[172,289,290],{"class":189},">\n",[218,292],{},"или",[163,295,297],{"className":165,"code":296,"language":167,"meta":168,"style":168},"kubectl apply -f исправленный_манифест.yaml\n",[42,298,299],{"__ignoreMap":168},[172,300,301,303,306,309],{"class":174,"line":175},[172,302,179],{"class":178},[172,304,305],{"class":182}," apply",[172,307,308],{"class":209}," -f",[172,310,311],{"class":182}," исправленный_манифест.yaml\n",[313,314,315],"blockquote",{},[21,316,317,318,321,322,94,325,328],{},"💡 ",[25,319,320],{},"Совет",": Используйте полные имена образов с реестром, например ",[42,323,324],{},"docker.io/library/nginx:1.25",[42,326,327],{},"nginx:latest",", чтобы избежать неоднозначностей.",[16,330,332],{"id":331},"способ-2-проверьте-доступность-образа-в-репозитории","Способ 2: Проверьте доступность образа в репозитории",[21,334,335],{},"Убедитесь, что образ действительно существует и доступен для загрузки.",[82,337,338,393,424],{},[85,339,340,341,364,366,367,369,370],{},"Попробуйте загрузить образ с любой ноды кластера (или локально, если используете Docker):",[163,342,344],{"className":165,"code":343,"language":167,"meta":168,"style":168},"docker pull \u003Cобраз>\n",[42,345,346],{"__ignoreMap":168},[172,347,348,351,354,356,359,362],{"class":174,"line":175},[172,349,350],{"class":178},"docker",[172,352,353],{"class":182}," pull",[172,355,190],{"class":189},[172,357,358],{"class":182},"обра",[172,360,361],{"class":196},"з",[172,363,290],{"class":189},[218,365],{},"Если используете ",[42,368,10],{},":",[163,371,373],{"className":165,"code":372,"language":167,"meta":168,"style":168},"ctr image pull \u003Cобраз>\n",[42,374,375],{"__ignoreMap":168},[172,376,377,380,383,385,387,389,391],{"class":174,"line":175},[172,378,379],{"class":178},"ctr",[172,381,382],{"class":182}," image",[172,384,353],{"class":182},[172,386,190],{"class":189},[172,388,358],{"class":182},[172,390,361],{"class":196},[172,392,290],{"class":189},[85,394,395,396,418,420,421,66],{},"Если образ приватный, убедитесь, что вы аутентифицированы:",[163,397,399],{"className":165,"code":398,"language":167,"meta":168,"style":168},"docker login \u003Cregistry>\n",[42,400,401],{"__ignoreMap":168},[172,402,403,405,408,410,413,416],{"class":174,"line":175},[172,404,350],{"class":178},[172,406,407],{"class":182}," login",[172,409,190],{"class":189},[172,411,412],{"class":182},"registr",[172,414,415],{"class":196},"y",[172,417,290],{"class":189},[218,419],{},"Для containerd настройте credentials в ",[42,422,423],{},"/etc/containerd/config.toml",[85,425,426],{},"Если образ отсутствует, найдите правильный тег или дайджест в репозитории и обновите манифест.",[16,428,430],{"id":429},"способ-3-настройте-imagepullsecrets-для-приватных-репозиториев","Способ 3: Настройте imagePullSecrets для приватных репозиториев",[21,432,433],{},"Если образ находится в приватном registry, Kubernetes должен иметь права на его загрузку.",[82,435,436,507,612],{},[85,437,438,439],{},"Создайте секрет Docker registry (если ещё нет):",[163,440,442],{"className":165,"code":441,"language":167,"meta":168,"style":168},"kubectl create secret docker-registry regcred \\\n  --docker-server=\u003Cregistry_url> \\\n  --docker-username=\u003Cusername> \\\n  --docker-password=\u003Cpassword>\n",[42,443,444,463,479,494],{"__ignoreMap":168},[172,445,446,448,451,454,457,460],{"class":174,"line":175},[172,447,179],{"class":178},[172,449,450],{"class":182}," create",[172,452,453],{"class":182}," secret",[172,455,456],{"class":182}," docker-registry",[172,458,459],{"class":182}," regcred",[172,461,462],{"class":209}," \\\n",[172,464,466,469,472,475,477],{"class":174,"line":465},2,[172,467,468],{"class":209},"  --docker-server=",[172,470,471],{"class":189},"\u003C",[172,473,474],{"class":209},"registry_url",[172,476,200],{"class":189},[172,478,462],{"class":209},[172,480,482,485,487,490,492],{"class":174,"line":481},3,[172,483,484],{"class":209},"  --docker-username=",[172,486,471],{"class":189},[172,488,489],{"class":209},"username",[172,491,200],{"class":189},[172,493,462],{"class":209},[172,495,497,500,502,505],{"class":174,"line":496},4,[172,498,499],{"class":209},"  --docker-password=",[172,501,471],{"class":189},[172,503,504],{"class":209},"password",[172,506,290],{"class":189},[85,508,509,510,513,514,542,544,545],{},"Добавьте секрет в сервис-аккаунт, используемый подом (по умолчанию ",[42,511,512],{},"default","):",[163,515,517],{"className":165,"code":516,"language":167,"meta":168,"style":168},"kubectl patch serviceaccount default \\\n  -p '{\"imagePullSecrets\": [{\"name\": \"regcred\"}]}'\n",[42,518,519,534],{"__ignoreMap":168},[172,520,521,523,526,529,532],{"class":174,"line":175},[172,522,179],{"class":178},[172,524,525],{"class":182}," patch",[172,527,528],{"class":182}," serviceaccount",[172,530,531],{"class":182}," default",[172,533,462],{"class":209},[172,535,536,539],{"class":174,"line":465},[172,537,538],{"class":209},"  -p",[172,540,541],{"class":182}," '{\"imagePullSecrets\": [{\"name\": \"regcred\"}]}'\n",[218,543],{},"Или укажите напрямую в спецификации пода/deployment:",[163,546,550],{"className":547,"code":548,"language":549,"meta":168,"style":168},"language-yaml shiki shiki-themes github-light github-dark","spec:\n  containers:\n  - name: myapp\n    image: myregistry/myapp:latest\n  imagePullSecrets:\n  - name: regcred\n","yaml",[42,551,552,561,568,582,592,600],{"__ignoreMap":168},[172,553,554,558],{"class":174,"line":175},[172,555,557],{"class":556},"s9eBZ","spec",[172,559,560],{"class":196},":\n",[172,562,563,566],{"class":174,"line":465},[172,564,565],{"class":556},"  containers",[172,567,560],{"class":196},[172,569,570,573,576,579],{"class":174,"line":481},[172,571,572],{"class":196},"  - ",[172,574,575],{"class":556},"name",[172,577,578],{"class":196},": ",[172,580,581],{"class":182},"myapp\n",[172,583,584,587,589],{"class":174,"line":496},[172,585,586],{"class":556},"    image",[172,588,578],{"class":196},[172,590,591],{"class":182},"myregistry/myapp:latest\n",[172,593,595,598],{"class":174,"line":594},5,[172,596,597],{"class":556},"  imagePullSecrets",[172,599,560],{"class":196},[172,601,603,605,607,609],{"class":174,"line":602},6,[172,604,572],{"class":196},[172,606,575],{"class":556},[172,608,578],{"class":196},[172,610,611],{"class":182},"regcred\n",[85,613,614,615],{},"Проверьте, что секрет применился:",[163,616,618],{"className":165,"code":617,"language":167,"meta":168,"style":168},"kubectl get pod \u003Cимя_пода> -o yaml | grep imagePullSecrets\n",[42,619,620],{"__ignoreMap":168},[172,621,622,624,626,628,630,632,634,636,638,641,643,645],{"class":174,"line":175},[172,623,179],{"class":178},[172,625,245],{"class":182},[172,627,186],{"class":182},[172,629,190],{"class":189},[172,631,193],{"class":182},[172,633,197],{"class":196},[172,635,200],{"class":189},[172,637,258],{"class":209},[172,639,640],{"class":182}," yaml",[172,642,203],{"class":189},[172,644,206],{"class":178},[172,646,647],{"class":182}," imagePullSecrets\n",[16,649,651],{"id":650},"способ-4-проверьте-ресурсы-и-сеть-ноды","Способ 4: Проверьте ресурсы и сеть ноды",[21,653,654],{},"Иногда проблема не в образе, а в среде выполнения.",[82,656,657,714,765],{},[85,658,659,662,663,676,678,679,697,699,700],{},[25,660,661],{},"Дисковое пространство",": подключитесь к ноде, где запускается под, и проверьте свободное место:",[163,664,666],{"className":165,"code":665,"language":167,"meta":168,"style":168},"df -h\n",[42,667,668],{"__ignoreMap":168},[172,669,670,673],{"class":174,"line":175},[172,671,672],{"class":178},"df",[172,674,675],{"class":209}," -h\n",[218,677],{},"Если место заканчивается, очистите неиспользуемые образы:",[163,680,682],{"className":165,"code":681,"language":167,"meta":168,"style":168},"docker system prune -a\n",[42,683,684],{"__ignoreMap":168},[172,685,686,688,691,694],{"class":174,"line":175},[172,687,350],{"class":178},[172,689,690],{"class":182}," system",[172,692,693],{"class":182}," prune",[172,695,696],{"class":209}," -a\n",[218,698],{},"или для containerd:",[163,701,703],{"className":165,"code":702,"language":167,"meta":168,"style":168},"ctr image prune\n",[42,704,705],{"__ignoreMap":168},[172,706,707,709,711],{"class":174,"line":175},[172,708,379],{"class":178},[172,710,382],{"class":182},[172,712,713],{"class":182}," prune\n",[85,715,716,719,720,762,764],{},[25,717,718],{},"Сеть и DNS",": проверьте доступность registry с ноды:",[163,721,723],{"className":165,"code":722,"language":167,"meta":168,"style":168},"ping \u003Cregistry_url>\ncurl -v https://\u003Cregistry_url>/v2/_catalog\n",[42,724,725,740],{"__ignoreMap":168},[172,726,727,730,732,735,738],{"class":174,"line":175},[172,728,729],{"class":178},"ping",[172,731,190],{"class":189},[172,733,734],{"class":182},"registry_ur",[172,736,737],{"class":196},"l",[172,739,290],{"class":189},[172,741,742,745,748,751,753,755,757,759],{"class":174,"line":465},[172,743,744],{"class":178},"curl",[172,746,747],{"class":209}," -v",[172,749,750],{"class":182}," https://",[172,752,471],{"class":189},[172,754,734],{"class":182},[172,756,737],{"class":196},[172,758,200],{"class":189},[172,760,761],{"class":182},"/v2/_catalog\n",[218,763],{},"Убедитесь, что нет блокировки firewall.",[85,766,767,770,771,800,802,803,98],{},[25,768,769],{},"Архитектура",": если нода имеет архитектуру, отличную от образа (например, ARM), потребуется образ для нужной архитектуры. Проверьте архитектуру ноды:",[163,772,774],{"className":165,"code":773,"language":167,"meta":168,"style":168},"kubectl get node \u003Cимя_ноды> -o jsonpath='{.status.nodeInfo.architecture}'\n",[42,775,776],{"__ignoreMap":168},[172,777,778,780,782,785,787,790,793,795,797],{"class":174,"line":175},[172,779,179],{"class":178},[172,781,245],{"class":182},[172,783,784],{"class":182}," node",[172,786,190],{"class":189},[172,788,789],{"class":182},"имя_нод",[172,791,792],{"class":196},"ы",[172,794,200],{"class":189},[172,796,258],{"class":209},[172,798,799],{"class":182}," jsonpath='{.status.nodeInfo.architecture}'\n",[218,801],{},"И найдите образ с соответствующей платформой в теге (например, ",[42,804,805],{},"nginx:1.25-alpine-arm64",[807,808],"in-article-ad",{},[16,810,812],{"id":811},"способ-5-анализ-логов-kubelet-и-событий","Способ 5: Анализ логов kubelet и событий",[21,814,815],{},"Если предыдущие шаги не дали результата, углубитесь в логи компонентов.",[82,817,818,855,884,920],{},[85,819,820,821],{},"Получите расширенные события пода с фильтрацией:",[163,822,824],{"className":165,"code":823,"language":167,"meta":168,"style":168},"kubectl get events --field-selector involvedObject.name=\u003Cимя_пода> --sort-by='.lastTimestamp'\n",[42,825,826],{"__ignoreMap":168},[172,827,828,830,832,835,838,841,843,845,847,849,852],{"class":174,"line":175},[172,829,179],{"class":178},[172,831,245],{"class":182},[172,833,834],{"class":182}," events",[172,836,837],{"class":209}," --field-selector",[172,839,840],{"class":182}," involvedObject.name=",[172,842,471],{"class":189},[172,844,193],{"class":182},[172,846,197],{"class":196},[172,848,200],{"class":189},[172,850,851],{"class":209}," --sort-by=",[172,853,854],{"class":182},"'.lastTimestamp'\n",[85,856,857,858],{},"Найдите ноду, на которой планируется запуск пода:",[163,859,861],{"className":165,"code":860,"language":167,"meta":168,"style":168},"kubectl get pod \u003Cимя_пода> -o wide\n",[42,862,863],{"__ignoreMap":168},[172,864,865,867,869,871,873,875,877,879,881],{"class":174,"line":175},[172,866,179],{"class":178},[172,868,245],{"class":182},[172,870,186],{"class":182},[172,872,190],{"class":189},[172,874,193],{"class":182},[172,876,197],{"class":196},[172,878,200],{"class":189},[172,880,258],{"class":209},[172,882,883],{"class":182}," wide\n",[85,885,886,887,908,910,911,48,913,915,916,919],{},"Подключитесь к этой ноде и просмотрите логи kubelet:",[163,888,890],{"className":165,"code":889,"language":167,"meta":168,"style":168},"journalctl -u kubelet -f --no-pager\n",[42,891,892],{"__ignoreMap":168},[172,893,894,897,900,903,905],{"class":174,"line":175},[172,895,896],{"class":178},"journalctl",[172,898,899],{"class":209}," -u",[172,901,902],{"class":182}," kubelet",[172,904,308],{"class":209},[172,906,907],{"class":209}," --no-pager\n",[218,909],{},"Ищите строки, содержащие ",[42,912,55],{},[42,914,27],{},". Там может быть указана более точная причина (например, ",[42,917,918],{},"x509: certificate signed by unknown authority"," для самоподписанных сертификатов).",[85,921,922],{},"Если используется самоподписанный registry, добавьте его сертификат в доверенные на всех нодах кластера.",[16,924,926],{"id":925},"профилактика","Профилактика",[928,929,930,939,949,964,976,982],"ul",{},[85,931,932,935,936,938],{},[25,933,934],{},"Всегда указывайте явный тег или дайджест"," образа вместо ",[42,937,97],{}," в production-манифестах.",[85,940,941,944,945,948],{},[25,942,943],{},"Проверяйте образы перед деплоем",": запускайте ",[42,946,947],{},"docker pull"," на тестовой ноде.",[85,950,951,954,955,48,958,961,962,66],{},[25,952,953],{},"Управляйте секретами централизованно",": используйте инструменты вроде ",[42,956,957],{},"External Secrets",[42,959,960],{},"HashiCorp Vault"," для автоматического создания ",[42,963,119],{},[85,965,966,969,970,972,973,98],{},[25,967,968],{},"Мониторьте свободное место на нодах"," и настройте автоматическую очистку неиспользуемых образов (например, через ",[42,971,31],{}," параметр ",[42,974,975],{},"--image-gc-high-threshold",[85,977,978,981],{},[25,979,980],{},"Используйте private registry с аутентификацией"," по умолчанию, а не анонимный доступ.",[85,983,984,987],{},[25,985,986],{},"Тестируйте образы на всех целевых архитектурах"," при использовании мульти-платформенных нод.",[989,990,991],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":168,"searchDepth":465,"depth":465,"links":993},[994,995,996,997,998,999,1000,1001],{"id":18,"depth":465,"text":19},{"id":79,"depth":465,"text":80},{"id":148,"depth":465,"text":149},{"id":331,"depth":465,"text":332},{"id":429,"depth":465,"text":430},{"id":650,"depth":465,"text":651},{"id":811,"depth":465,"text":812},{"id":925,"depth":465,"text":926},null,"2026-04-08 09:02:02","Ошибка ImagePullBackOff в kubectl мешает запуску подов. Узнайте 5 проверенных способов исправить проблему с загрузкой образа за 10 минут. Пошаговая инструкция для Kubernetes.","medium",false,"10-15 мин","md",[1010,1013,1016,1019],{"question":1011,"answer":1012},"Что означает статус ImagePullBackOff в Kubernetes?","Это состояние пода, когда kubelet многократно пытался загрузить контейнерный образ, но безуспешно. После нескольких неудачных попыток он переходит в статус BackOff, задерживая следующие попытки.",{"question":1014,"answer":1015},"Как быстро диагностировать причину ImagePullBackOff?","Выполните команду `kubectl describe pod \u003Cимя_пода>` и найдите события (Events) с типом `BackOff`. Там будет указана конкретная причина, например, `ErrImagePull` или `ImageInspectError`.",{"question":1017,"answer":1018},"Может ли ImagePullBackOff возникать из-за приватного Docker-репозитория?","Да, чаще всего. Если образ находится в приватном репозитории, необходимо правильно настроить `imagePullSecrets` в сервис-аккаунте пода или явно указать секрет в спецификации пода.",{"question":1020,"answer":1021},"Как предотвратить ImagePullBackOff при деплое?","Всегда проверяйте корректность имени образа и тега перед применением манифеста. Для приватных репозиториев заранее создавайте и привязывайте секреты. Используйте конкретные теги вместо `latest`.",[1023,1026,1029,1032,1035],{"name":1024,"text":1025},"Проверьте статус пода и события","Выполните `kubectl get pod \u003Cимя_пода>` и `kubectl describe pod \u003Cимя_пода>`. В разделе Events найдите сообщения об ошибках загрузки образа.",{"name":1027,"text":1028},"Убедитесь в корректности имени образа","В выводе `kubectl describe pod` проверьте поле `Image`. Убедитесь, что указан правильный репозиторий, имя и тег образа без опечаток.",{"name":1030,"text":1031},"Проверьте доступность образа в репозитории","Попробуйте вручную загрузить образ с той же ноды, где запускается под: `docker pull \u003Cобраз>` или `ctr image pull \u003Cобраз>` для containerd.",{"name":1033,"text":1034},"Проверьте секреты для приватных репозиториев","Убедитесь, что в сервис-аккаунте пода или в `spec.template.spec` указан `imagePullSecrets`. Проверьте существование секрета: `kubectl get secret \u003Cимя_секрета>`.",{"name":1036,"text":1037},"Изучите логи kubelet на ноде","Если предыдущие шаги не помогли, подключитесь к ноде, где планируется запуск пода, и проверьте логи kubelet: `journalctl -u kubelet -f`.","PT10M",[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049],"kubectl ImagePullBackOff","ошибка ImagePullBackOff","Kubernetes образ не загружается","контейнер не запускается","kubectl describe pod","проблемы с Docker образом","K8s ImagePullBackOff решение","kubectl ошибка запуска","Kubernetes ImagePullBackOff причины","как исправить ImagePullBackOff","ru_RU",{},true,"/errors/linux/kubectl-imagepullbackoff","general",[1056,1057,1058],"/errors/linux/kubectl-imagenotfound","/guides/linux/kubectl-describe-pod","/errors/general/docker-pull-error","Ошибки Kubernetes",{"title":5,"description":1004},"errors/linux/kubectl-imagepullbackoff","Статья объясняет ошибку ImagePullBackOff в Kubernetes, её основные причины и даёт практические решения для восстановления работы подов, включая проверку имени образа, доступа к репозиторию и секретов.",[1064,179,1065,1066,1067,1068,1069],"Kubernetes","Ошибки","Контейнеры","Docker","imagePullBackOff","Pods","error","fY-ReLMSSgYPVuI5Q-ZT6I8na-pa9VvNrfabYQezJRw",{"data":1073,"body":1074},{},{"type":1075,"children":1076},"root",[1077],{"type":1078,"tag":21,"props":1079,"children":1080},"element",{},[1081],{"type":1082,"value":1012},"text",{"data":1084,"body":1085},{},{"type":1075,"children":1086},[1087],{"type":1078,"tag":21,"props":1088,"children":1089},{},[1090,1092,1098,1100,1105,1107,1112,1113,1119],{"type":1082,"value":1091},"Выполните команду ",{"type":1078,"tag":42,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":1082,"value":1097},"kubectl describe pod \u003Cимя_пода>",{"type":1082,"value":1099}," и найдите события (Events) с типом ",{"type":1078,"tag":42,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":1082,"value":36},{"type":1082,"value":1106},". Там будет указана конкретная причина, например, ",{"type":1078,"tag":42,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":1082,"value":51},{"type":1082,"value":48},{"type":1078,"tag":42,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":1082,"value":1118},"ImageInspectError",{"type":1082,"value":66},{"data":1121,"body":1122},{},{"type":1075,"children":1123},[1124],{"type":1078,"tag":21,"props":1125,"children":1126},{},[1127,1129,1134],{"type":1082,"value":1128},"Да, чаще всего. Если образ находится в приватном репозитории, необходимо правильно настроить ",{"type":1078,"tag":42,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":1082,"value":119},{"type":1082,"value":1135}," в сервис-аккаунте пода или явно указать секрет в спецификации пода.",{"data":1137,"body":1138},{},{"type":1075,"children":1139},[1140],{"type":1078,"tag":21,"props":1141,"children":1142},{},[1143,1145,1150],{"type":1082,"value":1144},"Всегда проверяйте корректность имени образа и тега перед применением манифеста. Для приватных репозиториев заранее создавайте и привязывайте секреты. Используйте конкретные теги вместо ",{"type":1078,"tag":42,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":1082,"value":97},{"type":1082,"value":66},{"data":1152,"body":1153},{},{"type":1075,"children":1154},[1155],{"type":1078,"tag":21,"props":1156,"children":1157},{},[1158,1160,1166,1167,1172],{"type":1082,"value":1159},"Выполните ",{"type":1078,"tag":42,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":1082,"value":1165},"kubectl get pod \u003Cимя_пода>",{"type":1082,"value":224},{"type":1078,"tag":42,"props":1168,"children":1170},{"className":1169},[],[1171],{"type":1082,"value":1097},{"type":1082,"value":1173},". В разделе Events найдите сообщения об ошибках загрузки образа.",{"data":1175,"body":1176},{},{"type":1075,"children":1177},[1178],{"type":1078,"tag":21,"props":1179,"children":1180},{},[1181,1182,1187,1189,1194],{"type":1082,"value":40},{"type":1078,"tag":42,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":1082,"value":1044},{"type":1082,"value":1188}," проверьте поле ",{"type":1078,"tag":42,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":1082,"value":232},{"type":1082,"value":1195},". Убедитесь, что указан правильный репозиторий, имя и тег образа без опечаток.",{"data":1197,"body":1198},{},{"type":1075,"children":1199},[1200],{"type":1078,"tag":21,"props":1201,"children":1202},{},[1203,1205,1211,1212,1218],{"type":1082,"value":1204},"Попробуйте вручную загрузить образ с той же ноды, где запускается под: ",{"type":1078,"tag":42,"props":1206,"children":1208},{"className":1207},[],[1209],{"type":1082,"value":1210},"docker pull \u003Cобраз>",{"type":1082,"value":48},{"type":1078,"tag":42,"props":1213,"children":1215},{"className":1214},[],[1216],{"type":1082,"value":1217},"ctr image pull \u003Cобраз>",{"type":1082,"value":1219}," для containerd.",{"data":1221,"body":1222},{},{"type":1075,"children":1223},[1224],{"type":1078,"tag":21,"props":1225,"children":1226},{},[1227,1229,1235,1237,1242,1244,1250],{"type":1082,"value":1228},"Убедитесь, что в сервис-аккаунте пода или в ",{"type":1078,"tag":42,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":1082,"value":1234},"spec.template.spec",{"type":1082,"value":1236}," указан ",{"type":1078,"tag":42,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":1082,"value":119},{"type":1082,"value":1243},". Проверьте существование секрета: ",{"type":1078,"tag":42,"props":1245,"children":1247},{"className":1246},[],[1248],{"type":1082,"value":1249},"kubectl get secret \u003Cимя_секрета>",{"type":1082,"value":66},{"data":1252,"body":1253},{},{"type":1075,"children":1254},[1255],{"type":1078,"tag":21,"props":1256,"children":1257},{},[1258,1260,1266],{"type":1082,"value":1259},"Если предыдущие шаги не помогли, подключитесь к ноде, где планируется запуск пода, и проверьте логи kubelet: ",{"type":1078,"tag":42,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":1082,"value":1265},"journalctl -u kubelet -f",{"type":1082,"value":66},[]]