惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
爱范儿
爱范儿
罗磊的独立博客
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
U
Unit 42
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
H
Help Net Security
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理

博客园 - 秦瑞It行程实录

sre ocr 实践 Ollama 上的 novaforgeai/deepseek-coder:6.7b-optimized,它明确标注了“无需显卡 (No GPU required)”,最低 12GB 内存即可运行 docker pull docker.1ms.run/library/eclipse-temurin:17-jdk npm install @vue-office/docx --save ssh 限制 ip 及用户密钥认证登录 windows 11 安装 配置 时候 必须要联网吗 但是 镜像 没驱动 怎么跳过 Windows修改 本地账号 在线 账号 用 kali chntpw 工具 破解 本地 在线密码 联想笔记本 U盘 引导 需要关闭安全引导 win激活 秒杀 限流 技术 guava的限流器 博文阅读密码验证 - 博客园 复盘生产级故障边界除0故障 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 Jenkins基于role匹配Item项 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园
POD 状态一直 CrashLoopBackOff?教你三种容器调试技巧
秦瑞It行程实录 · 2026-04-17 · via 博客园 - 秦瑞It行程实录
本文总结了排障中经常使用到的几种方法,解决你的痛点,让你不再走弯路。

一、问题现场:CrashLoopBackOff 的真实困境
典型现象:

复制
kubectl get pod
1.
复制
NAME                  READY   STATUS             RESTARTS
nignx-xxx      0/1     CrashLoopBackOff   17
1.
2.
常见痛点包括:

容器启动即退出,看不到日志
kubectl exec 进不去
kubectl logs 日志不完整
不清楚镜像里到底有什么配置
二、核心思路:让容器“别死”
一句话总结:只要能让容器先活着,就一定能进去排障。

下面是我在生产中最常用、也最稳的 3 种方式。

1. 方式一:直接用 docker run 查看镜像内容(最快)
使用场景:

只想确认镜像内文件是否存在
不依赖 Kubernetes
本地或节点上能拉到镜像
示例:查看镜像内目录

复制
# 查看容器内某个目录文件或者权限
docker run --rm -ti  --entrypoint ls -l /opt reg.nginx.test:5000/dev/nginx:master_amd64 
# 通过entrypoint替换镜像启动命令进去镜像中
docker run -ti --rm --entrypoint=/bin/sh reg.nginx.test:5000/dev/nginx:master_amd64
1.
2.
3.
4.
这个命令做了什么?

参数

说明

--rm

退出即删除容器

-ti

交互式终端

--entrypoint ls

覆盖镜像原有启动命令

-l /var/cache

查看指定目录

2. 方式二:其它方式让容器不退出
复制
#方式一
docker run -d --name \
nginx-test reg.nginx.test:5000/dev/nginx:master_amd64 \
tail -f /dev/null
#方式二
docker run -d \
  --name init-job-test \
  --entrypoint sh \
  nginx-test reg.nginx.test:5000/dev/nginx:master_amd64 \
  -c "while true; do sleep 3600; done"
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
非常适合快速验证:

配置文件是否存在
路径是否写错
镜像构建是否完整
三、K8s 场景下,让 Pod 先“活着”
1. 场景说明
容器一启动就退出,导致:

Pod 一直 CrashLoopBackOff
无法 exec
日志刷不出来
2. 方法一:临时修改 Deployment 中开启 TTY
复制
spec:
  containers:
  - name: app
    image: xxx
    tty: true
1.
2.
3.
4.
5.
作用说明:

保持标准输入
防止容器因无前台进程立即退出
适用于启动脚本是 shell、程序较轻的场景
2. 方法 二(更稳):让容器 sleep infinity
复制
containers:
- name: app
  image: xxx
  command: ["sleep", "infinity"]
1.
2.
3.
4.
这是我个人最推荐的方式。

为什么?

容器不会退出
Pod 状态直接变为 Running
可以随意 kubectl exec 进去查看
四、方式三:docker-compose / 镜像启动脚本排障
使用场景:

本地 docker-compose 启动即退出
怀疑镜像 ENTRYPOINT / CMD 有问题 启动脚本写在镜像里
解决方法:覆盖启动命令

复制
services:
  app:
    image: xxx
    command: sleep infinity
1.
2.
3.
4.
然后:

复制
docker-compose up -d
docker exec -it app bash
1.
2.
适合分析:

ENTRYPOINT 执行顺序
启动脚本错误
环境变量是否缺失
五、关于 restartPolicy 的重要说明(K8s 必看)
复制
restartPolicy: Never
1.
为什么要加?

防止容器不断重启
适合 一次性排障
否则 Pod 会被 kubelet 一直拉起、杀死
尤其适用于临时调试 Po

posted on 2026-04-17 16:08  秦瑞It行程实录  阅读(50)  评论()    收藏  举报