解决使用 Kubernetes 部署 docker 镜像时"CrashLoopBackOff"错误



实际上我遵循手册https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app#console部署web应用程序教程。我在本地目录中制作了docker文件和图像。我把图片上传到了谷歌云平台容器注册中心。将映像推送到注册表是成功的。然后我制作了kubernetes集群并尝试部署它;CrashLoopBackOff";。

我删除了集群和pod几次,但都没有改变。当容器刚启动时,会出现错误消息。

按照文档,错误是"pod重复启动并崩溃",解决方案是仔细观察日志。。。

我搜索了其他用户的案例:比如ImagePullPolicy:始终/restartPolicy:始终但错误未解决。。。在此处输入图像描述

ps:根据pods日志。。错误代码为0

pps:现在我尝试更改容器的yaml文件。CCD_ 1到CCD_。但是

Pod "nginx-1-99dcd4d9f-84szv" is invalid: 
spec: Forbidden: pod updates may not change fields other than 
`spec.containers[*].image`, 
`spec.initContainers[*].image`, 
`spec.activeDeadlineSeconds` or 
`spec.tolerations` (only additions to existing tolerations)   
core.PodSpec{    
Volumes: []core.Volume{
{Name: "default-token-stk86", VolumeSource: core.VolumeSource{Secret: &core.SecretVolumeSource{SecretName: "default-token-stk86", DefaultMode: &420
}
}
}
},    InitContainers: nil,    Containers: []core.Container{
{   
TerminationMessagePath: "/dev/termination-log",    
TerminationMessagePolicy: "File", 
-  ImagePullPolicy: "Always", 
+  ImagePullPolicy: "IfNotPresent",    
SecurityContext: nil,    
Stdin: false,
},
},    EphemeralContainers: nil,    RestartPolicy: "Always",
}

出现此错误消息。

这是我的Dockerfile。安装测试"phptest.php"的设置和网页为了允许phptest.php,我更改了默认文件和init.sh

FROM    ubuntu
RUN     apt-get update && apt-get upgrade -y && 
apt-get -y install 
nginx 
vim 
php-fpm 
COPY    srcs/default /
COPY    srcs/phptest.php /
COPY    srcs/init.sh /
EXPOSE  80
CMD     bash init.sh

init.sh在这里

rm /etc/nginx/sites-available/default
mv default /etc/nginx/sites-available/
mv phptest.php /var/www/html
chown -R www-data /var/www/*
chmod -R 755 /var/www/*
service nginx start
service php7.4-fpm start
bash

我上传了新任务,因为帖子问题不符合stackoverflow的指南

Kubernetes容器在很大程度上不能运行交互式shell,但这就是容器中的主要过程。(映像的CMD运行init.sh;它执行一些工作,包括启动一些辅助进程,然后运行bashbash没有在tty上运行,所以它立即退出;所以容器也退出;由于其容器处于立即启动和退出循环中,pod进入CrashLoopBackOff状态。(

您应该重新设计此设置,以便有两个独立的部署,一个运行PHP应用程序,另一个运行Nginx反向代理。(类似地,还有两个匹配的服务。(它们中的每一个都直接作为映像的CMD运行这些进程(不要尝试使用service(。在将其转换回Kubernetes环境之前,您应该能够使用Docker Compose或其他较轻的工具测试类似的设置。

最新更新