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
相关产品推荐
相关产品推荐

