一个配置写错的镜像上了 compose,docker ps 里状态一直是 Restarting (1) 3 seconds ago,RestartCount 显示 300。日志里同一行报错刷了几百遍。乍看像缓存或者权限的锅,追下去往往不是。

docker inspect api --format '{{.RestartCount}} {{.State.Status}}'
docker update --restart=no api
docker logs --tail=50 api

追下去是这么回事:restart 只看进程退出码,非零退出就重启,退避时间从 100 毫秒翻倍到一分钟封顶。启动即退出的容器会一直在这个循环里,日志和 CPU 一起被吃掉。

「restart always 无限重启」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

具体做法是,先把重启策略改成 no 让容器停在退出状态 保留现场;再用 docker logs 看最后几十行 找出启动失败的那一步;修好配置后先用 --restart=on-failure:3 限次数验证 跑稳再放开;给日志加上大小限制 避免循环把磁盘写满。

验收就看一点,RestartCount 不再增长,容器停在 exited 状态可以慢慢看日志。

作者 9823189