docker ps 显示正在运行,但是服务已经 down 了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
c4923
V2EX    Docker

docker ps 显示正在运行,但是服务已经 down 了

  •  
  •   c4923 18 天前 2190 次点击

    这段时间我们这边服务经常遇到一个诡异的问题。

    服务在容器中正常运行了 2-3 周,期间没有人管过。某一天后端服务突然挂掉不再提供服务了。

    排查性能相关,cpu ,磁盘,内存都是正常的,docker ps 也显示正常没有重启之类的情况。但是 docker logs 日志停止输出。必须手动 docker restart 才能恢复服务,文件描述符数量也正常,容器日志也不存在写满的情况。因为要优先恢复服务可用性,所以没办法再排查更加细致的内容,有没有大佬遇到过类似的问题?或者说有大佬能提供一下下次出现类似情况的排查思路吗?

    docker 版本是 23.0.6

    29 条回复    2025-11-05 12:11:57 +08:00
    defunct9
        1
    defunct9  
       18 天前   4
    开 ssh ,让我上去看看
    finab
        2
    finab  
       18 天前   1
    你 docker 运行的不是提供服务本身的那个进程吧?
    c4923
        3
    c4923  
    OP
       18 天前
    @finab 就是后端服务本身
    c4923
        4
    c4923  
    OP
       18 天前
    @defunct9 哈哈,我也想,但是条件不允许
    log4j
        5
    log4j  
       18 天前   2
    有没有可能你服务的进程不是 0 号?这种情况它异常退出后 docker 是不知道
    klo424
        6
    klo424  
       18 天前   1
    多半是自己程序的 bug ,异常终止了。docker logs 的输出内容是可以通过程序修改的,所以如果程序自己崩了,没有弹出异常,docker 容器也不知道发生了什么。检查一下程序有没有 bug 吧。
    c4923
        7
    c4923  
    OP
       18 天前
    @klo424 目前初步怀疑确实是程序本身的问题,但因为不好排查所以无法判断,而且同一个版本下使用 Windows 的二进制运行的没有出现过类似的问题
    c4923
        8
    c4923  
    OP
       18 天前
    @log4j 看了下,服务本身确实不是 0 号进程,0 号进程是一个启动脚本。那就更可能是服务本身出现了问题。
    kd9yYw2RyhQwAwzn
        9
    kd9yYw2RyhQwAwzn  
       18 天前
    可以写 health check 做健康检查
    taohua1c
        10
    taohua1c  
       18 天前
    写个定时任务,每晚重启下 docker 服务,先跑着
    c4923
        11
    c4923  
    OP
       18 天前
    @kd9yYw2RyhQwAwzn 目前想到的解决方案是健康检查,但是我希望还是能找到具体原因。主要这么奇怪的情况我也是第一次遇到。
    c4923
        12
    c4923  
    OP
       18 天前
    @taohua1c 这个只能在实在没办法的情况下才能用了
    johnbobby
        13
    johnbobby  
       18 天前
    dockerfile 有问题吧,就像楼上说的不是 0 号进程
    Daybyedream
        14
    Daybyedream  
       18 天前
    进容器看业务到底咋回事呀
    deplives
        15
    deplives  
       18 天前
    盲猜 dockerfile 有问题,容器内启动的进程不是 0 导致即使服务挂了 docker 也认为没有问题一切正常
    xzysaber
        16
    xzysaber  
       18 天前
    这就是为什么 Docker 推荐一个容器一个进程,即使多个进程也要有成熟的进程管理工具。
    newaccount
        17
    newaccount  
       18 天前
    你有请求日志吧?把那些重放一遍看能重现出来不,不然等 2-3 周实在没法弄
    TeeMoCode
        18
    TeeMoCode  
       18 天前
    脚本中启动服务的命令是用的 exec 么?
    laminux29
        19
    laminux29  
       18 天前
    如果把容器实例当成物理宿主机,虽然里面的服务进程挂起,但物理宿主机是仍然在运行的,因此你用 docker ps 显示容器实例正在运行,是正常现象。至于 docker log 无输出,是因为 docker log 可能绑定到服务进程的 log 输出,由于服务进程挂起,无 log 输出,所以你用 docker log 也无输出了。
    zhangyunlu80
        20
    zhangyunlu80  
       18 天前
    这个意思不就是服务 hang 住了么
    c4923
        21
    c4923  
    OP
       18 天前
    @johnbobby dockerfile 没有改动过,之前从来没遇到过这种问题。
    c4923
        22
    c4923  
    OP
       18 天前
    @TeeMoCode 是的
    c4923
        23
    c4923  
    OP
       18 天前
    @newaccount 试过了, 确实复现不了
    fds
        24
    fds  
       18 天前   1
    保留现场,根据是什么语言,用相应工具提取一下 stack 看看卡在哪里了。
    软件 bug 很常见的,特别是有些异常输入之类的。大概率不是 docker 的问题。
    你要保证可用性,建议前面加个负载均衡之类的服务,这样一个停了,可以直接启动另外一个,然后分析前一个的状态。
    hefish
        25
    hefish  
       18 天前
    多数是服务停了,但是启动服务的 shell 还活着。在等待控制台的输入。
    MineDog
        26
    MineDog  
       18 天前
    从来都是 pid=1 的进程吧,0 号进程是什么
    TeeMoCode
        27
    TeeMoCode  
       18 天前
    @c4923 脚本里面用 exec 启动服务,pid=1 的就是你的服务进程。执行 docker ps 看状态是 up ,那说明 pid=1 还活着。 用 docker exec 进容器执行 ps -p 1 -o stat,rss,vsz,cmd,wchan 看进程状态如何呢
    yinmin
        28
    yinmin  
       18 天前 via iPhone
    大概率是服务程序的代码 bug ,或者程序引入模块的 bug 。有些服务架构是有外部调用多少次就重启一个新进程,可以规避长时间运行不稳定的情况。
    julyclyde
        29
    julyclyde  
       16 天前
    我猜你是用脚本启动的服务进程然后在脚本里做了无限等待吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2991 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:46 PVG 18:46 LAX 02:46 JFK 05:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86