You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器运行8-12分钟后消失,如何排查崩溃原因?

问题描述

我用以下命令运行Docker镜像:

docker run --privileged --name openvas --rm -dti -p 9392:9392 <image_name>

容器正常运行8-12分钟后会完全消失,执行docker ps -a也找不到它。

我找不到容器日志之外的其他Docker日志,而且容器消失后日志也没了。

查看包含“docker”的进程时,输出如下:

root      105873  3.5  0.6 1715848 24860 ?       Ssl   2022 2149:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root     3730648  0.0  0.0 1222272 1576 ?        Sl   22:26   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 9392 -container-ip 172.17.0.2 -container-port 9392
root     3730656  0.0  0.0 1148224 1524 ?        Sl   22:26   0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 9392 -container-ip 172.17.0.2 -container-port 9392
root     3732368  0.0  0.0   8624  1964 pts/1    S+   22:33   0:00 grep --color=auto -i docker

root      105873  3.5  0.7 1715848 29228 ?       Ssl   2022 2149:09 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root     3730648  0.0  0.0 1222272 1576 ?        Sl   22:26   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 9392 -container-ip 172.17.0.2 -container-port 9392
root     3730656  0.0  0.0 1148224 1524 ?        Sl   22:26   0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 9392 -container-ip 172.17.0.2 -container-port 9392
root     3732370  0.0  0.1 1081712 5872 ?        Dl   22:33   0:00 runc --root /var/run/docker/runtime-runc/moby --log /run/containerd/io.containerd.runtime.v2.task/moby/2692e34b79618056c6896af5d2da9f539c210c739ef7bae7420862e46e695ab0/log.json --log-format json --systemd-cgroup delete 2692e34b79618056c6896af5d2da9f539c210c739ef7bae7420862e46e695ab0
root     3732372  0.0  0.0   8624  1948 pts/1    S+   22:33   0:00 grep --color=auto -i docker

循环执行这个命令时,最初输出稳定;容器消失时会出现带日志路径的输出,但对应的日志文件不存在:

# cat /run/containerd/io.containerd.runtime.v2.task/moby/2692e34b79618056c6896af5d2da9f539c210c739ef7bae7420862e46e695ab0/log.json
cat: /run/containerd/io.containerd.runtime.v2.task/moby/2692e34b79618056c6896af5d2da9f539c210c739ef7bae7420862e46e695ab0/log.json: No such file or directory

这个容器在其他系统上运行正常,我不确定是不是内存之类的问题导致崩溃,想问下有没有通用的Docker日志可以用来排查原因?


排查方案

1. 先禁用容器自动删除

你用了--rm参数,容器退出后会自动删除,日志也跟着丢失。先去掉这个参数重新运行:

docker run --privileged --name openvas -dti -p 9392:9392 <image_name>

这样容器消失后,执行docker logs openvas就能查看日志,哪怕容器已经停止。

2. 查看Docker守护进程日志

Docker守护进程本身的日志能记录容器启动、退出的系统级原因,不同系统的日志位置不一样:

  • systemd系统(如Ubuntu、CentOS):
    # 查看历史日志
    journalctl -u docker.service
    # 实时监控日志
    journalctl -u docker.service -f
    
  • 非systemd系统:
    日志一般在/var/log/docker.log或/var/log/upstart/docker.log,直接查看即可:
    tail -f /var/log/docker.log
    

3. 查看containerd日志

Docker现在依赖containerd作为运行时,它的日志能补充更多底层运行信息:

  • systemd系统:
    journalctl -u containerd.service -f
    
  • 非systemd系统:
    日志通常在/var/log/containerd.log路径下。

4. 监控系统资源

如果怀疑是内存问题,运行容器时实时监控资源使用情况:

# 单独监控容器资源
docker stats openvas
# 监控整个系统资源
top
# 查看内存使用详情
free -h

如果是系统内存不足触发OOM(内存溢出)杀死容器,在dmesg日志里能找到相关记录:

dmesg | grep -i oom

5. 调整容器日志驱动

默认的json-file驱动会随容器删除丢失日志,换成local驱动可以持久化保存日志:

# 临时生效,重启容器时添加参数
docker run --privileged --name openvas -dti --log-driver local -p 9392:9392 <image_name>
# 永久生效,编辑/etc/docker/daemon.json文件,添加以下内容:
{
  "log-driver": "local"
}
# 重启Docker服务使配置生效
systemctl restart docker

内容的提问来源于stack exchange,提问作者LewlSauce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:20:33