2016-02-15 17 views
25

Tôi có các kiểm tra đơn vị chạy trên máy chủ xây dựng của mình và muốn nắm bắt các kết quả nhật ký để phân tích khi có lỗi. Tôi vẫn chưa tìm cách chuyển hướng đầu ra của docker-compose logs vào một tệp hoặc để tìm các tệp nhật ký thực sự sống ở đâu.Lưu nhật ký docker-compose vào một tệp

Tôi muốn tương đương với:

docker-compose logs > logs.txt 

Edit - làm rõ:

Tất cả các thùng chứa Docker tôi sản xuất bản ghi hữu ích, mà chạy tay docker-compose logs tiết lộ. Tôi muốn viết kịch bản quá trình này để lưu các bản ghi đó vào một tệp là một tạo phẩm trên máy chủ xây dựng của tôi. Về cơ bản, đầu ra của docker-compose logs được lưu vào một tệp, tuy nhiên docker-compose logs không bao giờ thoát.

Trả lời

25

By Docker mặc định sử dụng trình điều khiển json-file để ghi container các bản ghi của bạn và đầu ra json liệu của các bản ghi có thể được tìm thấy trong:

/var/lib/docker/containers/[container-id]/[container-id]-json.log 

Bạn có thể có được vị trí này bằng cách chạy:

docker inspect --format='{{.LogPath}}' [container-id or container-name] 

Khi bạn chạy docker-compose logs [service-name], docker-compose sẽ đính kèm vào dịch vụ (vùng chứa) mà bạn tham chiếu và đối tượng LogPrinter sẽ xuất nội dung của tệp ở trên, nhưng được định dạng để chúng dễ dàng hơn ead.

Tài liệu có liên quan: https://docs.docker.com/compose/compose-file/#logging

10

Tôi không chắc chắn những gì bạn đang cố gắng đạt được. Bạn đang cố gắng sao chép

docker-compose logs > logs.txt 

trong tệp soạn thảo làm hướng dẫn? Hoặc là vấn đề của bạn mà chuyển hướng không "bắt" toàn bộ đầu ra?

Trong sau đó, bạn có thể làm:

docker-compose logs --no-color >& logs.txt 

Hoặc

docker-compose logs --no-color |& tee logs.txt 

để cả hai nhìn thấy các bản ghi trên thiết bị đầu cuối và đổ nó vào một tập tin cùng một lúc.

+1

Gõ 'logs' Docker-soạn bắt đầu streaming các dữ liệu ghi nhận, phải không? Tôi về cơ bản muốn đổ tất cả đầu ra đó vào một tập tin. Vấn đề với lệnh mà tôi đề xuất là 'nhật ký soạn thảo dock' không chấm dứt, vì vậy nó không bao giờ chuyển hướng đầu ra đến tệp. – Ryan

+1

nhật ký là luồng, chuyển hướng điền tệp khi nhận được dữ liệu. Tệp của bạn có 0 byte không? Nó có làm điều đó với '> &' thay vì '>' không? – creack

+0

Đề xuất của bạn hoạt động (chúng cư trú logs.txt với nhật ký của tôi), nhưng lệnh không bao giờ trả về, vì nhật ký docker-compose chạy vô thời hạn. – Ryan

3

Trong bản phát hành sau này được tạo cố định 1.7.x +, cố định. xem https://github.com/docker/compose/issues/2227 & https://github.com/docker/compose/releases/tag/1.7.0

Trước đó, có cách khác để đạt được điều đó, giải pháp được chấp nhận là truy cập trực tiếp vào tệp lưu trữ, Có thể không áp dụng cho trường hợp từ xa/bảo mật.

Dưới đây chúng tôi có thể lấy tên container từ docker-compose ps lệnh và để cho các lệnh docker logs để lặp

docker-compose ps | tail -n +3 | awk '{print $1}' | xargs -n1 docker logs 
Các vấn đề liên quan