我正在尝试使用本地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');
});
答案 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下载所需的图像。
因此,创建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
,并像以前一样创建广告连播。
您可以指示从本地计算机中查找所需的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)
docker build -t my-first-image:3.0.0。
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