Bir kapsayıcıdaki günlükleri içeren bir günlük dosyası nerede?


117

Kullanarak birkaç konteyner çalıştırıyorum docker-compose. Uygulama günlüklerini komutla görebiliyorum docker-compose logs. Bununla birlikte, örneğin bir yere göndermek için ham günlük dosyasına erişmek isterim? Nerede bulunuyor? Sanırım her konteyner için ayrı bir günlük (konteyner içinde mi?) Ama nerede bulabilirim?

Yanıtlar:


191

Bir kapsayıcının günlükleri şurada bulunabilir:

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

(json olan varsayılan günlük biçimini kullanıyorsanız)


3
Gibi bir çok klasör var 004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff. Belirli bir konteyner için hangi klasöre bakılacağını nasıl bilebilirim?
Praveen Sripati

3
@PraveenSripati, bunu yaparsanız, kapsayıcıları çalıştırmak için kapsayıcı kimliği ilk sütunda gösterilirdocker ps
CS

1
@PraveenSripati yazarsanız docker ps, mevcut tüm konteynerlerinizi kimlikleriyle birlikte alırsınız. İstediğiniz konteynerin kimliğini, ardından /var/lib/docker/containers/çalıştırmadan kopyalayın ls | grep <paste the copied docker ID>. Sonra docker container'ı göreceksiniz
TheLebDev

cd /var/lib/docker/containers/ -bash: cd: / var / lib / docker / container'lar /: İzin reddedildi sudo cd /var/lib/docker/containers/ sudo: cd: command not found
canbax

2
@Chris Kimliğin docker ps --no-trunctamamını görmek için yapmam gerekiyordu
Dan Z

97

docker inspectGünlüklerinin nerede olduğunu görmek için her bir kapsayıcıyı yapabilirsiniz :

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

Ayrıca, günlüklerin toplu boyutlarını yönetmek için nerede olduğunu anlamaya çalışıyorsanız veya günlüğün kendisinin parametrelerini ayarlıyorsanız, aşağıdakileri uygun bulacaksınız.

Günlükler için ayrılan alan miktarını düzeltme

Bu, günlük geçmişini temizleme yeteneği isteğinden alınmıştır (sayı 1083 ):

Docker 1.8 ve docker-compose 1.4, docker compose log driver ve log-opt max-size kullanarak günlük boyutunu sınırlandırmak için bir yöntem zaten var :

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

Docker '2' sürümünün dosyalarını oluşturmada sözdizimi biraz değişti:

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

(her iki sözdiziminde de sayıların dizeler olarak tırnak içinde ifade edildiğini unutmayın)

docker-compose logsSonlandırmama ile ilgili olası sorun

  • Sorun 1866 : logskonteyner zaten durdurulmuşsa komut çıkmıyor

1
Kısa versiyon: docker inspect -f '{{.LogPath}}' $ INSTANCE_ID
Bienvenido David

12

Her kapsayıcı günlüğünün ne kadar yer kapladığını görmek için şunu kullanın:

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

(daha sudoönce ihtiyacınız olabilir ls).


İzin verilmedi.
Shakedk

1
Sonunda sudo eklemek yardımcı oldu: docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
Shakedk

2

Günlük dosyasını doğrudan daha az görüntülemek için kullanıyorum:

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

./viewLogs.sh CONTAINERNAME olarak çalıştır


2

Windows'ta varsayılan konum şudur: C:\ProgramData\Docker\containers\<container-id>-json.log.


Bu, geliştirme için yerel bir kapsayıcı çalıştırırken olanıdır! teşekkürler - bu bilgiyi bulmak çok zordu
Percy

1

22.08.2018 itibariyle, günlükler şu konumlarda bulunabilir:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.