Tệp nhật ký với nhật ký từ vùng chứa ở đâu?


117

Tôi đang chạy một số container bằng cách sử dụng docker-compose. Tôi có thể xem nhật ký ứng dụng bằng lệnh docker-compose logs. Tuy nhiên, tôi muốn truy cập tệp nhật ký thô để gửi nó đi đâu đó chẳng hạn? Nó nằm ở đâu? Tôi đoán đó là nhật ký riêng biệt cho mỗi vùng chứa (bên trong vùng chứa?) Nhưng tôi có thể tìm thấy nó ở đâu?

Câu trả lời:


191

Nhật ký của một vùng chứa có thể được tìm thấy trong:

/var/lib/docker/containers/<container id>/<container id>-json.log

(nếu bạn sử dụng định dạng nhật ký mặc định là json)


3
Có rất nhiều thư mục như 004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff. Làm thế nào để biết thư mục nào cần xem cho một vùng chứa cụ thể?
Praveen Sripati,

3
@PraveenSripati id vùng chứa để chạy các vùng chứa được hiển thị trong cột đầu tiên nếu bạn làm như vậydocker ps
CS

1
@PraveenSripati viết docker ps, bạn sẽ nhận được tất cả các vùng chứa có sẵn của mình cùng với ID của chúng. Sao chép ID của vùng chứa mong muốn của bạn, sau đó /var/lib/docker/containers/chạy ls | grep <paste the copied docker ID>. Sau đó, bạn sẽ thấy vùng chứa
docker đó

cd /var/lib/docker/containers/ -bash: cd: / var / lib / docker / container /: Quyền bị từ chối sudo cd /var/lib/docker/containers/ sudo: cd: command not found
canbax

2
@Chris Tôi đã phải làm gì docker ps --no-truncđể xem toàn bộ id
Dan Z

97

Bạn có thể docker inspecttừng vùng chứa để xem nhật ký của chúng ở đâu:

docker inspect --format='{{.LogPath}}' $INSTANCE_ID

Và, trong trường hợp bạn đang cố gắng tìm ra vị trí của các bản ghi để quản lý kích thước tập thể của chúng hoặc điều chỉnh các thông số của bản thân nhật ký, bạn sẽ thấy những điều sau có liên quan.

Khắc phục khoảng trống dành cho nhật ký

Điều này được lấy từ Yêu cầu khả năng xóa lịch sử nhật ký (vấn đề 1083) ):

Docker 1.8 và docker-compo 1.4 đã tồn tại một phương pháp để giới hạn kích thước nhật ký bằng cách sử dụng trình điều khiển nhật ký soạn thảo docker và log-opt max-size:

mycontainer:
  ...
  log_driver: "json-file"
  log_opt:
    # limit logs to 2MB (20 rotations of 100K each)
    max-size: "100k"
    max-file: "20"

Trong docker soạn tệp của phiên bản '2', cú pháp đã thay đổi một chút:

version: '2'
...
mycontainer:
  ...
  logging:
    #limit logs to 200MB (4rotations of 50M each)
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "4"

(lưu ý rằng trong cả hai cú pháp, các số được biểu thị dưới dạng chuỗi, trong dấu ngoặc kép)

Sự cố có thể xảy ra với việc docker-compose logskhông kết thúc

  • vấn đề 1866 : lệnh logskhông thoát nếu vùng chứa đã bị dừng

1
Phiên bản rút gọn: dockerpris -f '{.LogPath}}' $ INSTANCE_ID
Bienvenido David

12

Để xem bản ghi của mỗi vùng chứa đang chiếm bao nhiêu dung lượng, hãy sử dụng cái này:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

(bạn có thể cần một sudotrước đó ls).


Tôi bị từ chối cho phép.
Shakedk

1
Thêm sudo vào cuối đã giúp: docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
Shakedk

2

Để xem trực tiếp logfile trong ít hơn, tôi sử dụng:

docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less

chạy dưới dạng ./viewLogs.sh CONTAINERNAME


2

Trên Windows, vị trí mặc định là: C:\ProgramData\Docker\containers\<container-id>-json.log.


Đây là cái khi chạy một vùng chứa cục bộ để phát triển! cảm ơn - rất khó để tìm thấy thông tin này
Percy

1

Kể từ ngày 22 tháng 8 năm 2018, các bản ghi có thể được tìm thấy trong:

/data/docker/containers/<container id>/<container id>-json.log

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.