Docker for Windows Kubernetes pod 在创建新部署后获取 ImagePullBackOff

标签 docker kubernetes docker-for-windows

我已经成功构建了 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/

相关文章:

azure-devops - 适用于Windows的Docker Dockerfile

vagrant - 如何使用 kubeadm 和 Weave 让 kube-dns 在 Vagrant 集群中工作

docker - 如何将 docker 卷映射到谷歌计算引擎永久磁盘

docker - 无法连接到运行Kestrel服务器的本地Docker

Docker IBM Websphere Base 9 for windows - 管理控制台不工作(Windows 10 上的 Docker)

使用 Go 的 Docker 代理

docker - 如何进入已经使用新 TTY 运行的 Docker 容器

docker - 什么是 docker 子镜像

kubernetes - 初始化容器获取 url 并将数据挂载到 pod

docker - `docker serve`命令是什么