创建新部署后,适用于Windows的Docker for Kubernetes pod获得ImagePullBackOff

时间:2018-12-17 20:13:14

标签: docker kubernetes docker-for-windows

我已经成功构建了Docker映像并将其运行在Docker群中。当我尝试构建映像并与Docker Desktop的Kubernetes集群一起运行时:

docker build -t myimage -f myDockerFile .

(上面的操作成功在docker本地注册表中创建了一个映像)

kubectl run myapp --image=myimage:latest

(据我所知,这与使用kubectl create deploy命令相同)

上面的命令成功创建了一个部署,但是当它创建一个pod时,pod状态始终显示为:

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

我不确定为什么它在提取映像时会遇到麻烦-也许不知道docker本地映像在哪里?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我只是遇到了完全相同的问题。归结为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标记,则默认为始终

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

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

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

答案 2 :(得分:0)

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

对于其他通过Google找到它的人(就像我一样),卢卡斯上面提到的imagePullPolicy也可以在部署yaml文件中设置。请参见下面的yaml代码段(底部3行)中的spec.templage.spec.containers.imagePullPolicy。

我添加了该代码,并使用kubectl yaml deploy命令将应用程序成功部署到本地kube cluser中: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