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

KNative部署yaml填写镜像URL后报ContainerMissing错误如何解决

问题排查与解决步骤

  • 首先纠正测试方法错误:容器镜像地址不是HTTP资源链接,无法通过wget直接下载,你需要用docker/containerd等容器运行时的pull命令测试镜像是否可以正常拉取,用wget测试得到的失败结果不代表镜像本身有问题。
  • 确认镜像公开权限
    你推送的docker.io/adet4ever/sample-app默认如果是私有状态,K8s集群没有配置对应Docker Hub的镜像拉取Secret的话,会直接拉取失败,触发ContainerMissing错误。你可以登录Docker Hub后台,查看该镜像的可见性设置,改为Public公开后再重新部署测试。
  • 确认镜像标签正确性
    你推送镜像的时候如果没有指定标签,默认是latest标签,检查你本地推送的镜像标签和yaml中引用的是否一致,如果本地打了其他标签(比如v1),yaml里需要同步写成docker.io/adet4ever/sample-app:v1,否则会拉取不存在的latest标签导致失败。
  • 测试集群节点的镜像拉取能力
    登录到你的K8s集群的工作节点,手动执行docker pull docker.io/adet4ever/sample-app(如果集群用containerd作为运行时,替换为crictl pull docker.io/adet4ever/sample-app),看是否能正常拉取,如果拉取失败会输出具体错误原因,比如网络不通、认证失败、镜像不存在。
  • 配置私有镜像拉取Secret(如果需要保持镜像私有)
    如果不想公开镜像,可以在default命名空间下创建Docker Hub认证的Secret:
kubectl create secret docker-registry dockerhub-secret \
  --docker-server=docker.io \
  --docker-username=<你的Docker Hub用户名> \
  --docker-password=<你的Docker Hub密码> \
  --docker-email=<你的Docker Hub绑定邮箱>

然后在你的Knative Service yaml中添加imagePullSecrets配置:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: sample-app
  namespace: default
spec:
  template:
    spec:
      imagePullSecrets:
      - name: dockerhub-secret
      containers:
        - image: docker.io/adet4ever/sample-app
          env:
            - name: TARGET
              value: "Ruby Sample v1"

修改后重新执行kubectl apply -f <你的yaml文件名>即可。

  • 验证部署状态
    重新部署后执行kubectl get ksvc,看READY列是否变为True,拿到正确的访问URL后再测试访问,404错误是因为对应的Knative Service没有就绪,流量无法转发到正常工作的Pod,镜像拉取问题解决后服务就绪就能正常访问了。

内容的提问来源于stack exchange,提问作者Jamiu Adeleke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:24:03