在 Ubuntu 上使用 Docker 时,容器启动后立刻退出(Exited)是非常常见的问题,通常不是 Docker 本身坏了,而是容器里没有“持续运行的前台进程”。下面按常见原因给你系统梳理一下。
Docker 容器 不是虚拟机,生命周期 = 主进程生命周期。
一旦主进程结束,容器就退出。
✅ 正确示例(前台运行):
docker run -it ubuntu bash
❌ 错误示例(立刻退出):
docker run ubuntu echo hello
echo 执行完就结束 → 容器退出。
ubuntu 镜像但没指定命令docker run ubuntu
默认执行:
/bin/bash
但 没有 -it,bash 没有终端 → 立刻退出。
✅ 正确方式:
docker run -it ubuntu
❌ 错误示例:
CMD service nginx start
service 是后台启动 → 主进程退出 → 容器退出。
✅ 正确方式(前台运行):
CMD ["nginx", "-g", "daemon off;"]
例如:
ENTRYPOINT /app/start.sh
如果 start.sh 里是:
./app &
→ 脚本结束 → 容器退出。
✅ 应改为:
exec ./app
Ubuntu 默认用 systemd:
systemctl start nginx
❌ 容器里默认 没有 systemd → 容器直接退出或报错
✅ 解决方式:
nginx -g 'daemon off;'
日志:
docker logs <container_id>
可能看到:
Killed
解决:
docker run -m 512m ...
如:
✅ 查看日志:
docker logs <container_id>
# 1. 查看容器状态
docker ps -a
# 2. 查看退出码
docker inspect <container_id> | grep ExitCode
# 3. 查看日志
docker logs <container_id>
# 4. 交互式调试
docker run -it ubuntu bash
| 退出码 | 含义 |
|---|---|
| 0 | 正常退出 |
| 1 | 程序错误 |
| 137 | OOM |
| 126/127 | 命令无法执行 |
Ubuntu Docker 容器退出,99% 是因为“主进程结束”或“没有前台进程”。
如果你愿意,可以把:
docker run 命令docker logs 输出贴出来,我可以直接帮你定位是哪一条原因。