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

Docker容器重启后如何持久化日志?Compose配置场景求助

Docker Compose 重启后持久化日志的解决方案

针对你的问题,有几种可行的方法可以实现重启后日志不被覆盖,同时保留崩溃日志:

1. 优化默认json-file日志驱动配置

Docker默认使用json-file日志驱动,通过添加max-file和tag配置,可以让日志滚动生成且不被覆盖:

修改你的Docker Compose配置中的logging部分:

version: "2.1"
services:
  app:
    container_name: 'my-demo'
    image: 'my-demo'
    volumes:
      - ./config.json:/config.json
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "1024m"
        max-file: "5"  # 最多保留5个日志文件
        tag: "{{.Name}}_{{.ID}}"  # 日志文件名包含容器名+唯一ID,重启后ID不同,避免覆盖
  • max-file:限制保留的日志文件数量,当单个文件达到max-size时,自动生成新的日志文件,旧文件不会被删除。
  • tag:自定义日志文件的命名规则,容器每次重启都会生成新的ID,因此日志文件名不会重复,旧崩溃日志会被保留在对应容器ID的日志文件中。

2. 将容器日志挂载到宿主机目录

如果你的应用本身会将日志写入容器内的指定文件,可以通过卷挂载将日志目录映射到宿主机,直接在宿主机上管理日志文件:

假设你的应用将日志写入容器内的/var/log/my-demo/目录,修改Compose配置:

version: "2.1"
services:
  app:
    container_name: 'my-demo'
    image: 'my-demo'
    volumes:
      - ./config.json:/config.json
      - ./app-logs:/var/log/my-demo  # 挂载宿主机目录到容器日志目录
    restart: always
    logging:
      options:
        max-size: "1024m"

之后你可以在宿主机的./app-logs目录下直接查看所有历史日志,还可以配合宿主机的logrotate工具实现日志的自动分割和归档。

3. 查看已保留的旧日志

如果已经配置了上述日志持久化策略,你可以通过以下方式查看旧日志:

  • 使用Docker命令查看指定时间段的日志:docker logs --since 24h my-demo(查看过去24小时的日志)
  • 查看最后N行日志:docker logs my-demo --tail 1000
  • 直接访问Docker默认日志存储路径:/var/lib/docker/containers/<容器ID>/<容器ID>-json.log,每个容器实例都有独立的日志目录,旧容器的崩溃日志会保留在此处。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:09:59