溫馨提示×

ubuntu docker日志太多怎么清理

小樊
49
2025-10-01 17:30:24
欄目: 智能運維

Ubuntu下清理Docker日志的常用方法

1. 手動清理單容器日志(臨時解決)

若需快速清理單個容器的日志,可通過以下步驟操作:

  • 步驟1:查找容器ID:運行docker container ls -a,獲取目標容器的CONTAINER ID。
  • 步驟2:定位日志文件:Docker容器的日志默認存儲在/var/lib/docker/containers/<容器ID>/<容器ID>-json.log。
  • 步驟3:清空日志文件:使用truncate命令(推薦,不影響正在運行的容器)或cat命令清理日志:
    sudo truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log  # 清空文件內容,保留文件
    # 或(容器停止時使用)
    sudo cat /dev/null > /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
    

    注意truncate不會刪除文件,僅將文件大小置零,避免影響容器日志進程;cat /dev/null會清空文件,但需確保容器未在使用日志文件。

2. 批量清理所有容器日志(腳本自動化)

若需清理所有容器的日志,可編寫批量清理腳本:

  • 步驟1:創建清理腳本:新建clean_docker_logs.sh,內容如下:
    #!/bin/bash
    LOG_PATH="/var/lib/docker/containers"
    CONTAINERS=$(ls -1 $LOG_PATH)
    for CONTAINER in $CONTAINERS; do
      LOG_FILE="${LOG_PATH}/${CONTAINER}/${CONTAINER}-json.log"
      if [ -f "$LOG_FILE" ]; then
        echo "清理容器 ${CONTAINER} 的日志:${LOG_FILE}"
        sudo truncate -s 0 "$LOG_FILE"
      fi
    done
    echo "所有容器日志清理完成。"
    
  • 步驟2:賦予執行權限并運行
    chmod +x clean_docker_logs.sh
    sudo ./clean_docker_logs.sh
    
    該腳本會遍歷/var/lib/docker/containers目錄下的所有容器,清空其日志文件。

3. 配置定時任務自動清理(長期預防)

為避免日志再次堆積,可設置cron定時任務定期執行清理:

  • 步驟1:編輯cron表:運行crontab -e,添加以下內容(例如每天凌晨0點執行):
    0 0 * * * /usr/local/bin/clean_docker_logs.sh  # 假設腳本路徑為/usr/local/bin/
    
  • 步驟2:保存并退出:保存文件后,cron會自動加載任務,后續每天定時執行清理。

4. 限制容器日志大?。◤脑搭^控制)

若容器日志持續快速增長,建議通過限制日志大小從根源解決問題:

  • 全局設置(所有容器生效):修改Docker Daemon配置文件/etc/docker/daemon.json(若不存在則創建),添加以下內容:
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",  // 單個日志文件最大10MB
        "max-file": "3"     // 保留最多3個舊日志文件
      }
    }
    
    保存后重啟Docker服務:
    sudo systemctl restart docker
    
  • 單容器設置(僅針對特定容器):運行容器時通過--log-opt參數指定日志限制:
    docker run -d --log-opt max-size=10m --log-opt max-file=3 your_image
    
    此設置會覆蓋全局配置,僅對該容器生效。

5. 使用logrotate工具(專業日志管理)

logrotate是Linux系統自帶的日志輪轉工具,可實現日志的壓縮、歸檔、刪除自動化管理:

  • 步驟1:安裝logrotate
    sudo apt-get install logrotate
    
  • 步驟2:創建Docker日志輪轉配置:新建/etc/logrotate.d/docker,內容如下:
    /var/lib/docker/containers/*.log {
      rotate 7       # 保留最近7天的日志
      daily          # 每天輪轉一次
      missingok      # 若日志文件不存在則忽略
      notifempty     # 若日志為空則不輪轉
      compress       # 壓縮舊日志(如.gz格式)
      delaycompress  # 延遲壓縮(下一次輪轉時再壓縮)
      copytruncate   # 復制日志內容到新文件,清空原文件(不影響容器運行)
    }
    
    該配置會自動處理Docker容器日志的輪轉,無需手動干預。

注意事項

  • 清理日志前,建議備份重要日志(如cp /var/lib/docker/containers/<容器ID>/<容器ID>-json.log ~/backup/)。
  • 若容器因日志文件被占用無法清理,可嘗試停止容器后再清理(docker stop <容器ID>),但需注意容器停止會影響業務。
  • 定期檢查日志清理效果,可通過df -h查看磁盤空間使用情況,確認日志占用是否減少。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女