docker run -d 之后容器会自动停止吗?

不会——-d 只是后台运行,容器会一直跑到主进程退出或被 docker stop;但主进程退出(如命令执行完)容器就停。本文解释容器生命周期与保活要点。

最佳实践
docker run -d 之后容器会自动停止吗?封面

答案:-d(detached)只决定"后台运行、不占终端",不会让容器自动停止。容器会一直运行,直到:主进程自己退出、被 docker stop/docker kill 停掉、或宿主机重启(重启策略只能在之后重新启动,不能保持原进程继续运行)。反过来,如果你 docker run -d 后容器"秒停",那是因为主进程执行完退出了**,而不是 -d 的问题。**

容器存活的本质:主进程在,容器在

容器生命周期绑定在 PID 1 主进程上:

docker run -d nginx              # nginx 前台常驻 → 容器一直跑
docker run -d ubuntu echo hi     # echo 执行完就退出 → 容器"秒停"

后者 docker ps 看不到,docker ps -a 里显示 Exited (0)——退出码表示命令正常结束;若原本期望它持续服务,仍需排查启动方式。

想让临时容器一直活着

调试时想留个空容器慢慢 exec:

docker run -dit ubuntu                     # -it 保持 stdin+tty
docker run -d ubuntu sleep infinity        # 或挂个永驻命令
docker run -d ubuntu tail -f /dev/null     # 常见占位写法

停止与强停

docker stop 123abc     # 先发配置的停止信号,超时后 SIGKILL;默认信号通常为 SIGTERM
docker stop -t 60 myapp  # 延长优雅停机等待
docker kill 123abc     # 直接 SIGKILL,立即强停

默认等待时间受平台与配置影响(Linux 通常 10 秒,Windows 通常 30 秒)。优先 stop 给应用清理机会(关连接、flush 数据);kill 只用于卡死的容器。

异常退出与自动拉起

容器崩溃退出后想自动重启,靠重启策略:

docker run -d --restart unless-stopped myapp

崩溃退出自动拉起,宿主机重启也拉起;你手动 stop 过的不拉(unless-stopped 语义)。

容器退出较快时,应在启动前准备日志采集。观测云 容器日志采集配置完成后,用服务和容器标识查退出前的输出,再与 docker inspect 返回的退出状态核对;标准输出没有错误记录时,仍需检查进程及宿主机原因。

常见问题(FAQ)

Q:Exited (137) 是什么意思?
A:通常表示进程收到 SIGKILL(128+9),但退出码本身不能单独证明 OOM。结合 docker inspect 的 OOMKilled、宿主机日志和操作记录判断。

Q:Exited (0) 算故障吗?
A:退出码 0 只表示进程正常结束。若预期是常驻服务,仍可能是故障,需要检查命令是否只运行一次、应用是否自行退出,或是否转入后台。

Q:容器停止后还能起回来吗?
A:docker start 容器名 使用已有配置重新启动进程,容器可写层保留,但不会恢复原进程内存与连接;要想"重来"才 rm 重建。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台