我已经成功构建了 Docker 镜像并在 Docker 群中运行它们。当我尝试构建镜像并使用 Docker Desktop 的 Kubernetes 集群运行它时:
docker build -t myimage -f myDockerFile .
(上面成功在docker本地registry中创建了镜像)
kubectl run myapp --image=myimage:latest
(据我了解,这与使用 kubectl create 部署命令相同)
上面的命令成功创建了一个Deployment,但是当它创建Pod时,Pod状态总是显示:
NAME READY STATUS RESTARTS AGE
myapp-<a random alphanumeric string> 0/1 ImagePullBackoff 0 <age>
我不确定为什么拉取镜像时遇到问题 - 它可能不知道 docker 本地镜像在哪里吗?
最佳答案
我刚刚遇到了完全相同的问题。归结为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
,所以它会尝试在您配置的任何远程存储库(默认为 docker hub)中查找它,而不是使用本地镜像。只需将命令更改为:
kubectl run myapp --image=myimage:latest --image-pull-policy Never
或
kubectl run myapp --image=myimage:latest --image-pull-policy IfNotPresent
关于Docker for Windows Kubernetes pod 在创建新部署后获取 ImagePullBackOff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822385/