你有没有遇到过这种时刻:一条 docker run 敲下去,回车,满心期待地等着服务起来,结果docker ps里多了一行Exited (1),docker logs要么一片空白,要么只有一行晦涩的报错。我刚开始用 Docker 那阵子,遇到启动失败的第一反应就是删掉重来,直到有一次把容器里的关键配置一起删了,才真正意识到:配置错误导致的启动失败,不等于镜像损坏,更不等于数据丢失,绝大多数情况都有一套固定的排查路径和恢复手段。这篇文章想聊的就是这件事——容器因为配置错误无法启动时,怎么一步步找到根因,怎么在不丢数据的前提下把容器救回来,以及怎么避免下一次再犯同样的错。内容不涉及复杂的镜像优化,也不聊大规模编排,就是最接地气的排障与恢复实战。
1. 从一次"启动即退出"开始:配置错误让容器卡在 Exited 状态
1.1 一个最常见的崩溃现场
先看一个很典型的例子。假设你执行了这样一条命令:
docker run -d --name demo \ -p 8080:8080 \ -v /opt/demo/conf/:/app/conf \ -e LOG_LEVEL=debug \ demo-image:latest回车之后没报错,你以为一切顺利,结果docker ps -a看到的是:
CONTAINER ID IMAGE COMMAND STATUS NAMES abc123456789 demo-image:latest "/bin/sh -c 'python …" Exited (1) 2 seconds ago demo再跑docker logs demo,要么什么都没有,要么只有半行 pytho