我跑了eval $(minikube docker-env)
然后建了一个码头工人容器。当我在主机上运行docker images
时,我可以看到图像。当我运行minikube ssh
然后docker images
我就能看到它。
当我尝试运行它时,pod无法启动。 kubectl describe pod
给出:
14m 3m 7 kubelet, minikube spec.containers{quoting-crab-customer-refresh-cache-cron} Normal Pulling pulling image "personalisation-customer:latest"
14m 3m 7 kubelet, minikube spec.containers{quoting-crab-customer-refresh-cache-cron} Warning Failed Failed to pull image "personalisation-customer:latest": rpc error: code = 2 desc = Error: image library/personalisation-customer:latest not found
14m 2s 66 kubelet, minikube Warning FailedSync Error syncing pod
14m 2s 59 kubelet, minikube spec.containers{quoting-crab-customer-refresh-cache-cron} Normal BackOff Back-off pulling image "personalisation-customer:latest"
我的imagePullPolicy
是Always
。
可能导致这种情况的原因是什么?其他豆荚在当地工作。
答案 0 :(得分:4)
您并没有完全从本地注册表中删除,使用以前下载的图像或本地构建的图像,因为您指定imagePullPolicy: Always
这将始终尝试从注册表中删除它。
您的映像不包含特定的docker注册表personalisation-customer:latest
,以便docker理解index.docker.io/personalisation-customer:latest
这是一个公共docker注册表中不存在的映像。
因此,您有2个选项imagePullPolicy: IfNotPresent
或将图像上传到某个注册表。
答案 1 :(得分:1)
本地Docker缓存不是注册表。 Kubernetes尝试从Dockerhub(默认注册表)下载图像,因为您将iMagePullPolicy
设置为Always
。将其设置为Never
,以便Kubernetes使用本地图像。
答案 2 :(得分:0)
我有同样的问题。我发生的事情没有提到图像版本。我用
kubectl run testapp1 --image=<image> --image-pull-policy=IfNotPresent
但是带有该版本的图像最终对我有用。
kubectl run testapp1 --image=<image>:<version> --image-pull-policy=IfNotPresent
答案 3 :(得分:0)
对于minikube,进行如下更改:
使用以下方法评估docker env: 评估$(minikube docker-env)
构建docker映像: 清单构建-t我的图像
在Yaml文件的pod规范中,将图像名称设置为仅“ my-image”。
在您的Yaml文件中将imagePullPolicy设置为“从不”。这是示例:
apiVersion:
kind:
metadata:
spec:
template:
metadata:
labels:
app: my-image
spec:
containers:
- name: my-image
image: "my-image"
imagePullPolicy: Never