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 本地图像在哪里?
我只是遇到了完全相同的问题。归结为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)
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |