dockerコンテナのログサイズのクリーンアップ

3599 ワード

Dockerコンテナログクリーンアップ
date :2019-04-08  13:57:40
1.質問
dockerコンテナログにより、ホストディスク領域がいっぱいになります.docker logs -f container_name はスペースを占有して、使わないログは整理することができます.
2.解決方法
2.1 Dockerコンテナログの検出とスクリプトの削除
linuxでは、コンテナログは一般的に/var/lib/docker/containers/container_id/の下に格納され、jsonである.logの最後のファイル(ビジネスログ)は大きく、各ログファイルサイズのスクリプトdocker_を表示します.log_size.sh、内容は以下の通りです.
1 #!/bin/sh 
2 echo "======== start clean docker containers logs ========"  
3 logs=$(find /var/lib/docker/containers/ -name *-json.log)  
4 for log in $logs  
5         do  
6                 echo "clean logs : $log"  
7                 cat /dev/null > $log  
8         done  
9 echo "======== end clean docker containers logs ========"  

dockerコンテナが実行中の場合、rm -rfでログを削除すると、df -hでディスク領域が解放されていないことがわかります.なぜなら、LinuxまたはUnixシステムでは、rm -rfまたはファイルマネージャによってファイルが削除され、ファイルシステムのディレクトリ構造からリンクが解除されるからです.ファイルが開いている場合(プロセスが使用されている場合)、プロセスはファイルを読み取ることができ、ディスク領域も占有されます.正しい姿勢はcat /dev/null > *-json.logです.もちろん、rm -rfで削除してdockerを再起動することもできます.

2.2 Docker ( )

, 。 , 。 docker-compose max-size

nginx: 
  image: nginx:1.12.1 
  restart: always 
  logging: 
    driver: “json-file” 
    options: 
      max-size: “5g” 

  nginx , 5GB, 。

/etc/docker/daemon.json, 。 log-dirver log-opts , :

# vim /etc/docker/daemon.json

{
  "registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}  # max-size=500m,              500M,max-file=3,            ,   id+.json、id+1.json、id+2.json。
}
// docker
# systemctl daemon-reload 、
# systemctl restart docker

: , 。

:https://www.cnblogs.com/kaishirenshi/p/10670107.html