去评论
海欣资源

Docker容器日志如何清理

docker
2022/05/31 22:01:57
1. 为什么要清理?
在容器运行的过程中,通常会产生大量的日志,尤其是应用程序本身记录了info级别的日志时候,程序的标准输出记录到容器的日志。这样会占用大量的磁盘空间,严重者导致IO异常,最终服务会宕机。

2. 日志说明
Docker 容器日志存储在 /var/lib/docker/,文件格式是json格式,并通过容器ID进行区分。存储路径如下:
/var/lib/docker/containers/ID/ID-json.log
  1. [root@Reseach conf]# ll /var/lib/docker/containers
  2. total 76
  3. drwx-----x 4 root root 4096 Feb 23 09:45 10d8b6d6ee8a756061052e1c027a96d1a5b30c1
  4. drwx-----x 4 root root 4096 Feb 23 09:45 2aa280b3c0c314929a71a83436b87cccc1ad516
  5. drwx-----x 4 root root 4096 Mar 17 17:47 34031998d9b6f3df34b0ab466e38a84cbad1e12

  6. [root@Reseach 10d8b6d6ee8a756061052e1c027a96d1a5b30c14d3a88856e3180b7e14adeb5d]# tree -L 2 ./
  7. ./
  8. ├── 10d8b6d6ee8a756061052e1c027a96d1a5b30c14d3a88856e3180b7e14adeb5d-json.log
  9. ├── checkpoints
  10. ├── config.v2.json
  11. ├── hostconfig.json
  12. ├── hostname
  13. ├── hosts
  14. ├── mounts
  15. ├── resolv.conf
  16. └── resolv.conf.hash
3. 日志查看方式
3.1 docker log
docker logs -f 容器ID

3.2 docker-compose logs
滚动查看最后20行,并现实时间戳。
docker-compose logs -f -t --tail=20

4. 清理
找到对应的日志文件:
docker inspect --format='{{.LogPath}}' CONTAINER_ID
进行清理:
cat /dev/null > xxx-json.log

5. 防患于未然
针对日志打印频繁的服务,可以直接在docker-compose.yml中配置日志记录选项,这样有助于Docker自己清理日志。
  1. version: "3"
  2. services:
  3.   ShardingSphereProxy:
  4.     image: apache/shardingsphere-proxy
  5.     container_name: shardingsphere-proxy
  6.     network_mode: "bridge"
  7.     restart: always
  8.     command: server /data
  9.     ports:
  10.       - 13307:3307
  11.     volumes:
  12.       - ./conf:/opt/shardingsphere-proxy/conf
  13.       - ./ext-lib:/opt/shardingsphere-proxy/ext-lib
  14.     environment:
  15.       - JVM_OPTS="-Djava.awt.headless=true"
  16.     # 日志记录文件数量和文件大小
  17.     logging:
  18.       driver: "json-file"
  19.       options:
  20.         max-size: "200m"
  21.         max-file: "3"