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

Jak*_*keJ 6 docker kubernetes docker-for-windows

我已经成功构建了 Docker 镜像并在 Docker swarm 中运行它们。当我尝试构建映像并使用 Docker Desktop 的 Kubernetes 集群运行它时:

docker build -t myimage -f myDockerFile .
Run Code Online (Sandbox Code Playgroud)

(以上成功在docker本地注册表中创建了一个镜像)

kubectl run myapp --image=myimage:latest
Run Code Online (Sandbox Code Playgroud)

(据我了解,这和使用 kubectl create 部署命令是一样的)

上面的命令成功创建了一个部署,但是当它创建一个pod时,pod状态总是显示:

NAME                                   READY  STATUS            RESTARTS  AGE 
myapp-<a random alphanumeric string>   0/1    ImagePullBackoff  0         <age>
Run Code Online (Sandbox Code Playgroud)

我不确定为什么它在拉取图像时遇到问题 - 它可能不知道 docker 本地图像在哪里?

Luc*_*cas 8

我只是遇到了完全相同的问题。归结为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
Run Code Online (Sandbox Code Playgroud)

具体来说,这部分说:Defaults to Always if :latest tag is specified

这意味着,您创建了一个本地映像,但是,因为您使用:latest它,它将尝试在您配置的任何远程存储库(默认为 docker hub)中找到它,而不是使用您的本地。只需将您的命令更改为:

kubectl run myapp --image=myimage:latest --image-pull-policy Never
Run Code Online (Sandbox Code Playgroud)

或者

kubectl run myapp --image=myimage:latest --image-pull-policy IfNotPresent
Run Code Online (Sandbox Code Playgroud)

  • 霍莉嘘%t。这应该出现在每个教程中。花了几个小时试图弄清楚如何共享图像。谢谢你! (3认同)

Ric*_*ico 2

您没有指定myimage:latest托管位置,但本质上ImagePullBackoff意味着我无法提取图像,因为:

  • 您的 Docker VM 中没有可以访问 Docker 注册表(Docker Hub?)的网络设置
  • myimage:latest您的注册表中不存在或拼写错误。
  • myimage:latest需要凭据(您正在从私人注册表中提取)。您可以查看此内容以在 Pod 中配置容器凭据。