我正在尝试使用我的本地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.获取pod日志
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');
});
发布于 2019-04-03 16:17:13
原因
这是因为它无法下载pod定义文件中定义的docker镜像。默认情况下,它从以下位置下载所需的图像DockerHub..。
方式1
所以在创建您的my-first-image:3.0.0
您必须将其发布到DockerHub。为此,在DockerHub上创建一个帐户,并使用以下命令从终端登录登录命令
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
作为YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0
并像以前一样创建pod。
方式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
发布于 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
kind: Pod
apiVersion: v1
metadata:
name: my-first-pod
spec:
containers:
- name: my-first-container
image: my-first-image:3.0.0
imagePullPolicy: Never
发布于 2019-03-28 15:54:20
您已经构建了镜像,但需要推送到docker存储库。
如果你在kubernetes节点上构建docker镜像,它可以工作,但最好是推送到存储库,这样docker将从中央存储库拉取,随着节点数量的增加,您无法控制pod将调用的位置,并且镜像将不可用。
docker push -t my-first-image:3.0.0
如果您有私有docker存储库,请推送到私有存储库,并使用完全限定的镜像名称。
https://stackoverflow.com/questions/55392014
复制相似问题