2015-08-05 17 views
39

Tôi đang chạy một vùng chứa trên máy ảo. Thùng chứa của tôi đang ghi nhật ký theo mặc định thành tệp /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log cho đến khi đĩa đầy.Nhật ký vùng chứa Docker lấy tất cả không gian đĩa của tôi

Hiện tại, tôi phải xóa tệp này theo cách thủ công để tránh đĩa bị đầy. Tôi đọc rằng trong Docker 1.8 sẽ có một tham số để rotate the logs. Bạn sẽ đề xuất như cách giải quyết hiện tại?

+2

Là một workaround hiện tại, bạn có thể tắt các bản ghi hoàn toàn nếu nó không tầm quan trọng với bạn. Điều này có thể được thực hiện bằng cách khởi động docker daemon với '--log-driver = none'. Nếu bạn muốn vô hiệu hóa các bản ghi chỉ cho các thùng chứa cụ thể, bạn có thể bắt đầu chúng bằng '--log-driver = none' trong lệnh' docker run'. Một tùy chọn khác có thể là gắn kết bộ nhớ ngoài vào '/ var/lib/docker'. Giống như một chia sẻ NFS hoặc một cái gì đó có dung lượng lưu trữ nhiều hơn so với các máy chủ trong câu hỏi. – Dharmit

+2

Hoặc sử dụng trình điều khiển nhật ký 'journald' và có tạp chí lo lắng về việc xoay vòng nhật ký. – larsks

+0

@Dharmit nằm ở đâu trên CoreO? – poiuytrez

Trả lời

55

Docker 1.8 đã được phát hành với tùy chọn xoay vòng nhật ký. Đang thêm:

--log-opt max-size=50m 

khi vùng chứa được khởi chạy thực hiện thủ thuật. Bạn có thể tìm hiểu thêm tại: https://docs.docker.com/engine/admin/logging/overview/

+0

Chỉ cần lưu ý, điều này dường như chỉ có sẵn cho các bản ghi JSON và fluentd. – dman

+4

Chỉ cần lưu ý nhanh rằng lược đồ phiên bản đã thay đổi sau Docker 1.13. Nếu bạn có số phiên bản như '17.03.0-ce' có nghĩa là bạn đang sử dụng lược đồ phiên bản 1.13 mới. – tripleee

5

Chú ý: bài này liên quan đến Docker phiên bản < 1.8 (mà không có tùy chọn --log-opt)

Tại sao bạn không sử dụng logrotate (mà cũng hỗ trợ nén)?

/var/lib/docker/containers/*/*-json.log { 
hourly 
rotate 48 
compress 
dateext 
copytruncate 
} 

Configure nó hoặc trực tiếp trên CoreOs Node của bạn hoặc triển khai một container (ví dụ https://github.com/tutumcloud/logrotate) mà gắn kết/var/lib/Docker để xoay các bản ghi.

+5

Tôi không nghĩ đây là giải pháp tốt. Bạn cần phải trả lại bất kỳ daemon nào đang chạy để ngừng ghi vào nhật ký cũ và bắt đầu ghi vào nhật ký mới. Nếu không, hạt nhân Linux sẽ tiếp tục tham chiếu tệp nhật ký cũ trong bộ nhớ (ngược lại với đĩa). Logrotate có thể làm điều này với daemon bình thường, nhưng nảy Docker hoặc container gây ra thời gian chết. – dman

+1

Điểm tốt, tôi đồng ý. Câu trả lời này được cung cấp trong những ngày đầu của Docker (tm), trong khi đó các tính năng được xây dựng (như đã đề cập trong câu trả lời khác) nên thực hiện công việc. – gtonic

+0

Điều này có một số vấn đề, nó quay nhật ký nhưng tiêu thụ đĩa vẫn hiển thị tương tự. Tôi đã sử dụng v5.0.2 sau đó đã phải nâng cấp nó lên phiên bản mới nhất với https://get.docker.com/ script để sử dụng tùy chọn --log-opt với lệnh tạo hoặc chạy lệnh docker. –

11

CHÚ Ý: Đây là cho Docker-soạn phiên bản 2 chỉ

Ví dụ:

version: '2' 
services: 
    db: 
    container_name: db 
    image: mysql:5.7 
    ports: 
     - 3306:3306 
    logging: 
     options: 
     max-size: 50m 
Các vấn đề liên quan