Docker镜像推送到K8s集群后为什么Pod一直CrashLoopBackOff?
我本地用Docker构建了一个前端镜像,能正常运行,但推到私有仓库再用K8s部署就一直CrashLoopBackOff。已经确认镜像拉取成功,也试过在容器里加sleep 3600调试,还是不行。
Deployment配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-app
spec:
replicas: 1
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: web
image: my-registry/frontend:v1
ports:
- containerPort: 80
command: ["/bin/sh", "-c"]
args: ["npm start"]
是不是因为基础镜像没装Node?但本地跑得好好的啊……
先说几个关键点:
1. 你的命令写法不对,
command和args组合起来实际执行的是/bin/sh -c "npm start",这会导致shell把整个字符串当命令执行2. 建议直接去掉
command,只用args来定义启动命令改下你的Deployment配置:
如果还不行,建议你:
1. 先用
kubectl logs看看容器崩溃前的日志2. 检查Dockerfile里有没有正确设置
WORKDIR(很多新手会漏这个)3. 确保基础镜像确实装了Node(虽然你说本地能跑,但k8s环境可能不一样)
WP里面搞容器化部署我也踩过类似的坑,最后发现是用户权限问题。你可以试试加个
securityContext配置,比如:先按这个试试,不行再查日志看具体报错。