Kubernetes部署Lagom服务时镜像拉取策略Never致Pod同步失败
分析Kubernetes部署Lagom AccessService时的"Container image is not present with pull policy of Never"错误
这个错误的核心是Kubernetes无法在节点本地找到你指定的镜像,同时Pod的imagePullPolicy被设置为Never(意味着K8s不会尝试从远程仓库拉取镜像)。结合你的构建流程,我整理了几个最可能的原因和对应的排查/解决步骤:
1. 镜像名称/标签与Kubernetes Deployment配置不匹配
你用fabric8插件构建的镜像名称是由根pom里的<name>%g/%a:%l</name>定义的:
%g对应项目的groupId%a对应应用模块的artifactId%l对应latest标签(同时你还配置了${project.version}作为额外标签)
首先执行docker images查看实际构建出的镜像全名(比如类似com.example/accessservice:1.0.0或com.example/accessservice:latest),然后对比你的Kubernetes Deployment/YAML文件里的spec.containers[0].image字段:
- 要确保镜像仓库、名称、标签完全一致,哪怕是大小写差异都会导致K8s识别不到。
- 比如如果Deployment里写的是
accessservice:latest,但实际镜像名是my.group/accessservice:latest,就会出现找不到的情况。
2. Minikube Docker环境上下文不一致
Minikube自带独立的Docker daemon,你必须确保:
- 构建镜像的终端已经执行了
eval $(minikube docker-env),并且在这个环境下完成了clean package docker:build - 部署Kubernetes资源的终端也处于同一个Minikube Docker环境中(如果是新终端,需要重新执行
eval $(minikube docker-env))
可以通过以下步骤验证:
# 确认当前Docker环境指向Minikube docker context show # 或者查看Docker daemon地址 echo $DOCKER_HOST
如果输出不是Minikube对应的地址,重新执行eval $(minikube docker-env)后再重新部署Pod。
3. ImagePullPolicy配置的潜在问题
如果你的Deployment里明确设置了imagePullPolicy: Never,需要注意:
- 这个策略要求镜像必须已经存在于Pod调度到的节点本地(在Minikube场景下就是Minikube虚拟机内的Docker)
- 如果你在构建镜像后重启过Minikube,可能会导致镜像丢失,需要重新执行构建命令
- 如果你不确定镜像是否存在于Minikube内部,可以进入Minikube虚拟机验证:
minikube ssh docker images | grep accessservice
如果看不到镜像,说明构建时没有正确推送到Minikube的Docker daemon中,需要重新构建。
4. Fabric8插件构建配置的小细节检查
你的插件配置里有几个点可以确认:
- 根pom里的
<skip>true</skip>和应用模块里的<skip>false</skip>是正确的,确保只有应用模块会构建镜像 - 应用模块的entrypoint配置不会影响镜像的存在性,但如果镜像构建过程中出现静默错误(比如依赖打包不完整),也可能间接导致部署问题,但你的错误提示是镜像不存在,所以这个可能性较低
快速验证步骤总结
- 确认当前终端处于Minikube Docker环境:
eval $(minikube docker-env) - 查看本地镜像:
docker images | grep accessservice,记录完整镜像名 - 检查Deployment的
image字段是否和上述镜像名完全一致 - 如果不一致,修改Deployment的镜像配置;如果一致,重新构建镜像并重新部署
内容的提问来源于stack exchange,提问作者Imen
相关产品推荐
相关产品推荐

