EKS 1.28集群php-fpm Pod容器已启动却仍处于ContainerCreating状态求助
EKS 1.28中PHP-FPM Pod容器已启动但始终处于ContainerCreating状态的排查思路
核心现象
- 运行版本1.28的EKS集群,PHP-FPM Pod出现异常:容器已完成拉取、创建、启动流程(Events中显示
Started container api-test-php),且容器能生成日志,但Pod始终处于Pending状态,ContainersReady为False,容器状态显示ContainerCreating - 切换到Docker Hub的干净PHP镜像后,Pod能正常进入
Running状态
可能的原因及排查方向
1. 自定义镜像的PHP-FPM启动方式问题
自定义ECR镜像可能修改了PHP-FPM的默认启动逻辑:
- 若PHP-FPM以后台模式启动(未加
-F参数),Kubelet会认为容器的主进程未持续运行,无法标记容器为就绪,导致状态卡在ContainerCreating - 对比干净镜像的启动命令,确认自定义镜像是否使用
php-fpm -F(前台运行)来维持主进程的持续性
2. 镜像权限或SELinux上下文冲突
EKS节点默认可能启用SELinux,自定义镜像的文件权限、运行用户可能不符合节点安全策略:
- 在节点执行
journalctl -u kubelet | grep <Pod名称>,查看是否有权限相关报错(如文件访问被拒绝、SELinux上下文不匹配) - 尝试调整镜像内的文件权限(如
RUN chmod -R 755 /usr/local/etc/php-fpm.d/),或切换为非root用户运行容器(若节点限制root容器)
3. CNI网络配置异常
Pod未分配IP(IP字段为空),可能是CNI插件(如Amazon VPC CNI)在分配网络时出现问题:
- 查看节点上的CNI日志(路径通常为
/var/log/aws-routed-eni/),搜索Pod相关记录,确认是否存在IP分配失败、路由配置异常 - 检查自定义镜像是否修改了网络相关配置(如禁用IPv6、自定义路由表),导致CNI无法正常初始化容器网络
4. 镜像内初始化脚本阻塞
自定义镜像可能包含启动前的初始化脚本,脚本未正常退出或进入循环:
- 执行
kubectl logs <Pod名称>查看容器完整日志,确认初始化脚本是否有异常输出、是否正常结束 - 对比干净镜像的启动流程,排查自定义镜像新增的初始化逻辑是否存在阻塞
5. 容器运行时兼容性问题
EKS 1.28默认使用containerd,自定义镜像若使用Docker特定特性(如BuildKit专属指令),可能导致containerd无法正确识别容器状态:
- 检查镜像构建方式,尝试用传统Docker构建方式(禁用BuildKit)重新构建镜像后测试
- 对比自定义镜像与干净镜像的镜像元数据(
docker inspect <镜像ID>),排查是否有不兼容的配置项
快速验证步骤
- 强制PHP-FPM前台运行:在自定义镜像的Dockerfile中添加
ENTRYPOINT ["php-fpm", "-F"],重新构建部署 - 查看节点kubelet日志,定位容器创建阶段的具体报错
- 逐步移除自定义镜像中的非必要配置,对比测试定位问题点
内容的提问来源于stack exchange,提问作者Diogo Alves
相关产品推荐
相关产品推荐

