首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >kubectl get pods显示ErrImagePull

kubectl get pods显示ErrImagePull
EN

Stack Overflow用户
提问于 2019-03-28 15:16:06
回答 5查看 21.9K关注 0票数 9

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

1.首先,我在终端中运行以下命令

代码语言:javascript
运行
复制
eval $(minikube docker-env)

2.我创建了一个docker镜像,如下所示

代码语言:javascript
运行
复制
sudo docker image build -t my-first-image:3.0.0 .

3.我创建了pod.yml,如下所示,并运行以下命令

代码语言:javascript
运行
复制
kubectl -f create pod.yml.

4.然后我尝试运行以下命令

代码语言:javascript
运行
复制
kubectl get pods

但它显示以下错误

代码语言:javascript
运行
复制
NAME                             READY   STATUS             RESTARTS   AGE
multiplication-b47499db9-phpb7   0/1     ImagePullBackOff   0          23h
my-first-pod                     0/1     ErrImagePull       0          7s

5.获取pod日志

代码语言:javascript
运行
复制
kubectl describe pod my-first-pod
代码语言:javascript
运行
复制
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"
代码语言:javascript
运行
复制
Dockerfile

    FROM node:carbon
    WORKDIR /app
    COPY . .
    CMD [ "node", "index.js" ]
代码语言:javascript
运行
复制
pods.yml

    kind: Pod
    apiVersion: v1
    metadata:
     name: my-first-pod
    spec:
     containers:
     - name: my-first-container
       image: my-first-image:3.0.0
代码语言:javascript
运行
复制
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');
    });
EN

回答 5

Stack Overflow用户

发布于 2019-04-03 16:17:13

原因

这是因为它无法下载pod定义文件中定义的docker镜像。默认情况下,它从以下位置下载所需的图像DockerHub..。

方式1

所以在创建您的my-first-image:3.0.0您必须将其发布到DockerHub。为此,在DockerHub上创建一个帐户,并使用以下命令从终端登录登录命令

代码语言:javascript
运行
复制
sudo docker login

成功登录后,在标签中使用您的DockerHub用户名重建docker镜像,并将其推送到DockerHub (更多细节)

代码语言:javascript
运行
复制
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

并像以前一样创建pod。

方式2

您可以指示从本地计算机查找所需的docker镜像,而不是从DockerHub下载。为此,您必须添加imagePullPolicy: Never在您的pod.yml

具体容器描述下的文件。下面是您的pod.yml显示在何处定义镜像拉取策略的文件

代码语言:javascript
运行
复制
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
票数 9
EN

Stack Overflow用户

发布于 2019-03-28 15:48:44

由于您正在使用未上传的镜像,因此.You将不得不将imagePullPolicy设置为Never,否则Kubernetes将尝试下载该镜像。

启动minikube

minikube启动

设置docker环境

eval $(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=Never

检查它是否正在运行

kubectl获取pod

您的pod规范应该如下所示

pods.yml

代码语言:javascript
运行
复制
kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: my-first-image:3.0.0
   imagePullPolicy: Never
票数 2
EN

Stack Overflow用户

发布于 2019-03-28 15:54:20

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

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

代码语言:javascript
运行
复制
docker push -t my-first-image:3.0.0

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55392014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档