docker - kubectl get pods 显示 ErrImagePull
问题描述
我正在尝试使用我的本地 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.我得到豆荚日志
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');
});
解决方案
原因
这是因为它无法下载您的 pod 定义文件中定义的 docker 镜像。默认情况下,它从DockerHub下载所需的图像。
方式一
因此,在创建my-first-image:3.0.0
映像后,您必须将其发布到 DockerHub。为此,在 DockerHub 上创建一个帐户并使用login命令从终端登录
sudo docker login
登录成功后,使用标签中的 DockerHub 用户名重建您的 docker 镜像并将其推送到 DockerHub(更多详细信息)
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
在as中更新您的图像YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0
并像以前一样创建您的 pod。
方式二
您可以指示从本地机器查找所需的 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
推荐阅读
- r - 是否有解决二阶线性模型的 R 函数?
- haskell - XMonad 如何生成具有指定工作目录的进程?
- javascript - 尝试在生成器中使用 setTimeout 来控制生成随机数的过程,但失败了
- java - Tomcat 9中请求标头中的特殊字符问题
- azure-ad-b2c - 在 ID 为“AAD-UserReadUsingObjectId”策略的技术配置文件中定义的 ID 为“objectId”的查找声明找不到声明
- c# - 如何使用“Windows.Networking.NetworkOperators”获取 Esim 类对象
- swift - 点击后更改 barButtonSystemItem
- node.js - npm 错误!在“...registry.npmjs.org/@i”附近解析时 JSON 输入意外结束
- excel - 用于重新格式化数据的 Excel 宏
- javascript - 根据图像的大小有条件地设置样式属性,通过 url 获取