【问题标题】:Docker for Windows Kubernetes pod gets ImagePullBackOff after creating a new deploymentDocker for Windows Kubernetes pod 在创建新部署后获取 ImagePullBackOff
【发布时间】:2018-12-17 20:13:13
【问题描述】:

我已成功构建 Docker 映像并在 Docker 群中运行它们。当我尝试构建映像并使用 Docker Desktop 的 Kubernetes 集群运行它时:

docker build -t myimage -f myDockerFile .

(以上成功在docker本地注册表中创建镜像)

kubectl run myapp --image=myimage:latest

(据我了解,这和使用 kubectl create deployment 命令是一样的)

上面的命令成功创建了一个deployment,但是在做一个pod的时候,pod状态总是显示:

NAME                                   READY  STATUS            RESTARTS  AGE 
myapp-<a random alphanumeric string>   0/1    ImagePullBackoff  0         <age>

我不知道为什么它在拉取图像时遇到问题 - 它可能不知道 docker 本地图像在哪里?

【问题讨论】:

  • 您的 kubectl 是否指向其他上下文?例如minikube
  • 不,很好的检查,我可以在 Docker for Desktop 的 kubernetes 下拉列表(?)中看到它选择了 docker-for-desktop。谢谢。

标签: docker kubernetes docker-for-windows


【解决方案1】:

我刚刚遇到了完全相同的问题。归结为imagePullPolicy

PC:~$ kubectl explain deployment.spec.template.spec.containers.imagePullPolicy
KIND:     Deployment
VERSION:  extensions/v1beta1

FIELD:    imagePullPolicy <string>

DESCRIPTION:
     Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always
     if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.
     More info:
     https://kubernetes.io/docs/concepts/containers/images#updating-images

具体来说,这部分内容是:如果指定了 :latest 标签,则默认为 Always

这意味着,您创建了一个本地映像,但是,因为您使用 :latest,它会尝试在您配置的任何远程存储库(默认为 docker hub)中找到它,而不是使用您的本地。只需将您的命令更改为:

kubectl run myapp --image=myimage:latest --image-pull-policy Never

kubectl run myapp --image=myimage:latest --image-pull-policy IfNotPresent

【讨论】:

  • 冬青嘘%t。这应该在每个教程中。花了几个小时试图弄清楚如何共享图像。谢谢!
【解决方案2】:

您没有指定myimage:latest 的托管位置,但基本上ImagePullBackoff 意味着我无法提取图像,因为:

  • 您的 Docker VM 中没有可以访问 Docker 注册表(Docker Hub?)的网络设置
  • myimage:latest 在您的注册表中不存在或拼写错误。
  • myimage:latest 需要凭据(您从私有注册表中提取)。您可以查看 this 在 Pod 中配置容器凭据。

【讨论】:

  • 我是这么认为的。我看到了一种通过 Docker-for-Desktop / Settings / Daemon 公开注册表的方法,但不知道这是否也会公开映像存储库。
【解决方案3】:

我在使用 YAML 文件运行 pod 部署时遇到了同样的 ImagePullBack 错误,也在 Docker 桌面上。

对于通过谷歌找到这个的其他人(就像我一样),Lucas 上面提到的 imagePullPolicy 也可以在部署 yaml 文件中设置。请参阅下面 yaml sn-p 中的 spec.templage.spec.containers.imagePullPolicy(从底部算起 3 行)。

我使用 kubectl yaml deploy 命令添加了它,并将我的应用成功部署到本地 kube 集群中:kubectl apply -f .\Deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app-deployment
  labels:
    app: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-app
        image: node-web-app:latest
        imagePullPolicy: Never
        ports:
        - containerPort: 3000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2020-12-02
    相关资源
    最近更新 更多