Nhảy đến nội dung chính

Cấu hình Log Rotation cho Docker container

image.png

Thư mục /home/docker/.local/share/docker/containers/*/*json.log chiếm nhiều dung lượng. Để giải quyết vấn đề này, chúng ta cần cấu hình Log Rotation (xoay vòng log) để giới hạn kích thước tối đa của mỗi file log và số lượng file log được giữ lại.


1. Cấu hình cho toàn bộ hệ thống (Áp dụng cho mọi container mới)

Đây là cách tốt nhất để đảm bảo các container chạy sau này không bao giờ làm đầy ổ cứng của Server nữa. Đầu tiên chúng ta cần chỉnh sửa file cấu hình của Docker Daemon.

  1. Mở (hoặc tạo) file daemon.json:
    Bash
    sudo vi /etc/docker/daemon.json
  2. Thêm nội dung sau vào file:
    JSON
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    • max-size (10m): Mỗi file log tối đa là 10 Megabytes. Khi đạt ngưỡng này, Docker sẽ tự động tạo file mới.
    • max-file (3): Giữ lại tối đa 3 file cũ nhất. Khi có file thứ 4, file cũ nhất sẽ bị xóa. Tổng cộng chúng ta sẽ chỉ mất tối đa 30MB log cho mỗi container.
  3. Lưu file và khởi động lại Docker:
    Bash
    sudo systemctl restart docker

Lưu ý: Cấu hình này chỉ áp dụng cho các container tạo mới sau khi restart. Các container đang chạy sẽ không bị ảnh hưởng.


2. Cấu hình cho từng container cụ thể

Nếu dùng docker run hoặc docker-compose, chúng ta có thể giới hạn log ngay trong câu lệnh/file đó.

  • Dùng lệnh docker run:
    Bash
    docker run -d \
      --log-driver json-file \
      --log-opt max-size=10m \
      --log-opt max-file=3 \
      your_image
  • Dùng docker-compose.yml:
    YAML
    services:
      app:
        image: your_image
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"

3. Cách dọn dẹp các file log hiện tại (Xử lý ngay lập tức)

Nếu ổ cứng đã đầy và chúng ta cần xóa nhanh log của các container đang chạy mà không muốn xóa container đó, chúng ta có thể dùng lệnh sau:

# Xóa trắng nội dung tất cả các file log .json của container
find /home/docker/.local/share/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} +

Lệnh này sẽ tìm tất cả các file kết thúc bằng *-json.log và đưa kích thước của chúng về 0 mà không làm gián đoạn ứng dụng đang chạy.

CleanShot 2026-01-14 at 11.51.00.png


Tổng kết

Để giải quyết triệt để, chúng ta nên thực hiện Cách 1 (sửa file daemon.json). Sau đó, xóa các container cũ và chạy lại (docker-compose up -d hoặc docker run) để chúng nhận cấu hình giới hạn dung lượng mới.