我已经成功构建了Docker映像并将其运行在Docker群中。当我尝试构建映像并与Docker Desktop的Kubernetes集群一起运行时:
docker build -t myimage -f myDockerFile .
(上面的操作成功在docker本地注册表中创建了一个映像)
kubectl run myapp --image=myimage:latest
(据我所知,这与使用kubectl create deploy命令相同)
上面的命令成功创建了一个部署,但是当它创建一个pod时,pod状态始终显示为:
NAME READY STATUS RESTARTS AGE
myapp-<a random alphanumeric string> 0/1 ImagePullBackoff 0 <age>
我不确定为什么它在提取映像时会遇到麻烦-也许不知道docker本地映像在哪里?
答案 0 :(得分:2)
您没有指定托管myimage:latest
的位置,但是本质上ImagePullBackoff
意味着我无法拉取图像,原因是:
myimage:latest
在您的注册表中不存在或拼写错误。myimage:latest
需要凭据(您是从私有注册表中提取的)。您可以看看this在Pod中配置容器凭据。答案 1 :(得分:0)
我只是遇到了完全相同的问题。归结为imagePullPolicy
:
PC:~$ kubectl explain deployment.spec.template.spec.containers.imagePullPolicy
KIND: Deployment
VERSION: extensions/v1beta1
FIELD: imagePullPolicy <string>
DESCRIPTION:
Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always
if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.
More info:
https://kubernetes.io/docs/concepts/containers/images#updating-images
具体来说,显示以下内容的部分:如果指定了:latest标记,则默认为始终。
这意味着您创建了本地映像,但是由于使用:latest
,因此它将尝试在您配置的任何远程存储库(默认为docker hub)中找到它,而不是使用本地。只需将命令更改为:
kubectl run myapp --image=myimage:latest --image-pull-policy Never
或
kubectl run myapp --image=myimage:latest --image-pull-policy IfNotPresent
答案 2 :(得分:0)
在Docker桌面上使用YAML文件运行pod部署时,我也遇到了同样的ImagePullBack错误。
对于其他通过Google找到它的人(就像我一样),卢卡斯上面提到的imagePullPolicy也可以在部署yaml文件中设置。请参见下面的yaml代码段(底部3行)中的spec.templage.spec.containers.imagePullPolicy。
我添加了该代码,并使用kubectl yaml deploy命令将应用程序成功部署到本地kube cluser中:kubectl apply -f。\ Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app-deployment
labels:
app: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: node-web-app:latest
imagePullPolicy: Never
ports:
- containerPort: 3000