kubectl get pods显示ErrImagePull

时间:2019-03-28 07:16:06

标签: docker kubernetes kubectl minikube

我正在尝试使用本地docker镜像创建pod,如下所示。

1。首先,我在终端

中运行此命令
eval $(minikube docker-env)

2。我创建了如下的docker镜像

sudo docker image build -t my-first-image:3.0.0 .

3。我创建了如下所示的pod.yml,然后运行此命令

kubectl -f create pod.yml.

4。然后我尝试运行此命令

kubectl get pods

但显示以下错误


NAME                             READY   STATUS             RESTARTS   AGE
multiplication-b47499db9-phpb7   0/1     ImagePullBackOff   0          23h
my-first-pod                     0/1     ErrImagePull       0          7s

5.i获取豆荚日志

kubectl describe pod my-first-pod 

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  99s                default-scheduler  Successfully assigned default/my-first-pod to minikube
  Warning  Failed     41s (x3 over 94s)  kubelet, minikube  Failed to pull image "my-first-image:3.0.0": rpc error: code = Unknown desc = Error response from daemon: pull access denied for my-first-image, repository does not exist or may require 'docker login'
  Warning  Failed     41s (x3 over 94s)  kubelet, minikube  Error: ErrImagePull
  Normal   BackOff    12s (x4 over 93s)  kubelet, minikube  Back-off pulling image "my-first-image:3.0.0"
  Warning  Failed     12s (x4 over 93s)  kubelet, minikube  Error: ImagePullBackOff
  Normal   Pulling    0s (x4 over 98s)   kubelet, minikube  pulling image "my-first-image:3.0.0"

Dockerfile

    FROM node:carbon
    WORKDIR /app
    COPY . .
    CMD [ "node", "index.js" ]

pods.yml

    kind: Pod
    apiVersion: v1
    metadata:
     name: my-first-pod
    spec:
     containers:
     - name: my-first-container
       image: my-first-image:3.0.0

index.js

    var http = require('http');
    var server = http.createServer(function(request, response) {
     response.statusCode = 200;
     response.setHeader('Content-Type', 'text/plain');
     response.end('Welcome to the Golden Guide to Kubernetes
    Application Development!');
    });
    server.listen(3000, function() {
     console.log('Server running on port 3000');
    });

5 个答案:

答案 0 :(得分:1)

您已经构建了映像,但是需要推送到docker存储库。

如果您要在kubernetes节点上构建docker映像,它可以工作,但最好推送到存储库,这样docker将从中央存储库中拉出,因为节点数量增加,您无法控制pod调用的位置,并且映像不可用。

docker push -t my-first-image:3.0.0 

如果您有私有docker存储库,请推送到私有存储库并使用完全限定的映像名称。

答案 1 :(得分:1)

存储库名称丢失。

在dockerHub中创建一个帐户。 然后在dockerhub中构建并将映像推送到您的仓库中

sudo docker image build -t niranga/my-first-image:3.0.0 .
sudo docker login
sudo docker push niranga/my-first-image:3.0.0

将pod.yaml文件中的图像名称更新为niranga / my-first-image:3.0.0

它应该工作

答案 2 :(得分:1)

原因

这是因为它无法下载您的pod定义文件中定义的docker映像。默认情况下,它会从DockerHub下载所需的图像。

方法1

因此,创建my-first-image:3.0.0映像后,必须将其发布到DockerHub。为此,在DockerHub创建一个帐户,然后使用login命令从终端登录

sudo docker login

成功登录后,使用标记中的DockerHub用户名重建您的Docker映像并将其推送到DockerHub(more details

sudo docker image build -t YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0 .
sudo docker push YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0

pod.yml中的图片更新为YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0,并像以前一样创建广告连播。

方法2

您可以指示从本地计算机中查找所需的Docker映像,而不是从DockerHub下载。为此,您必须在特定容器描述下的imagePullPolicy: Never文件中添加pod.yml。以下是您的pod.yml文件的示例,以显示在何处定义图像提取策略

kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0
   imagePullPolicy: Never

答案 3 :(得分:0)

由于您使用的是未上传的图像。您必须将imagePullPolicy设置为Never,否则Kubernetes会尝试下载图像。

启动minikube

minikube开始

设置docker env

评估$(minikube docker-env)

构建图片

docker build -t my-first-image:3.0.0。

在minikube中运行

kubectl运行my-first-container --image = my-first-image:3.0.0 --image-pull-policy =从不

检查它是否正在运行

kubectl获得豆荚

您的Pod规格应如下所示

pods.yml

kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: my-first-image:3.0.0
   imagePullPolicy: Never

答案 4 :(得分:0)

在将映像构建到本地Minikube注册表时,您可能需要设置imagePullPolicy: Never,以便它不会尝试从远程注册表中提取映像。 pod规格看起来像这样:

kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: my-first-image:3.0.0
   imagePullPolicy: Never