You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kubernetes Deployment拉取私有镜像失败,Pod配置正常

问题

部署Deployment时遭遇镜像拉取错误:

rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/registryName/projectName:latest": failed to unpack image on snapshotter overlayfs: unexpected media type text/html

Deployment配置文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <projectName>-deployment
  namespace: <projectNamespace>
spec:
  selector:
    matchLabels:
      app: <projectname>
  replicas: 1
  template:
    metadata:
      labels:
        app: <projectName>
    spec:
      containers:
      - name: private-reg
        image: <registry>/<projectName>:latest
        ports:
          - containerPort:  9000
      imagePullSecrets:
        - name: docker-hub-cred

但使用以下Pod配置却能正常拉取镜像并运行:

apiVersion: v1
kind: Pod
metadata:
  name: <projectName>-pod
  namespace: <projectNamespace>
spec:
  containers:
    - name: <projectName>
      image: <registry>/<projectName>:latest
  imagePullSecrets:
    - name: docker-hub-cred
解决方法

1. 修正标签大小写不匹配问题

Kubernetes标签是大小写敏感的,你的Deployment里spec.selector.matchLabels.app的值是小写的<projectname>,但Pod模板中metadata.labels.app是驼峰式的<projectName>,这会导致Deployment无法匹配到创建的Pod,进而不断触发镜像拉取操作,间接引发异常。

把Deployment的selector标签改成和模板一致:

spec:
  selector:
    matchLabels:
      app: <projectName> # 改为和模板一致的名称

2. 确认镜像地址一致性

虽然Pod能正常运行,但还是要检查Deployment里的image字段是否和Pod完全一致,确保<registry>变量替换正确,没有拼写错误(比如私有仓库域名、项目名大小写)。

3. 验证部署

修正配置后重新部署:

kubectl apply -f deployment.yml -n <projectNamespace>

查看Deployment状态和事件,确认是否正常:

kubectl describe deployment <projectName>-deployment -n <projectNamespace>
kubectl get events -n <projectNamespace>

补充说明

错误中的unexpected media type text/html意味着拉取到的内容不是镜像层,而是HTML页面(通常是仓库返回的404/403错误页面)。既然Pod能正常拉取,说明镜像地址和拉取密钥没问题,核心问题大概率是Deployment的标签匹配错误导致的异常循环拉取。

内容的提问来源于stack exchange,提问作者35Zoll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:48:24