我修改了 Docker-Image 中的内容并运行它的 Kubernetes Pod。但是,Kubernetes Pod 包含旧版本 Docker Image 的内容,而不是修改后的内容。
这怎么可能?
我猜 K8s 工作节点正在尝试从本地获取尽可能多的层,而从 docker-registry 中只获取很少的层。如何解决这个问题,使得每次 K8s 工作节点仅从 Registry 中拉取 docker 镜像的所有层?
我修改了 Docker-Image 中的内容并运行它的 Kubernetes Pod。但是,Kubernetes Pod 包含旧版本 Docker Image 的内容,而不是修改后的内容。
这怎么可能?
我猜 K8s 工作节点正在尝试从本地获取尽可能多的层,而从 docker-registry 中只获取很少的层。如何解决这个问题,使得每次 K8s 工作节点仅从 Registry 中拉取 docker 镜像的所有层?
设置imagePullPolicy
为Always
。
样本:
apiVersion: v1
kind: Pod
metadata:
name: demo
spec:
containers:
- name: image-name
image: my-image:0.0.1
imagePullPolicy: Always # <<--here
默认拉取策略会
IfNotPresent
导致 kubelet 跳过拉取已经存在的镜像。如果您想始终强制拉动,请将其设置为Always
。
imagePullPolicy: Always
在您的部署中使用
如果您过于频繁地部署应用程序(典型用例是 CI/CD),此选项会派上用场。
如果您希望您的图像应该在没有任何缓存的情况下从--no-cache
docker build 命令中的本地使用命令重新构建,还有一件事。
docker build -t myimage/imagename . --no-cache