Kundaliklarni Docker konteynerida qanday tozalash mumkin?

Muayyan konteynerning jurnallarini ko'rish uchun docker log [container-name] dan foydalanaman.

Ushbu jurnallarni tozalashning oqilona usuli bormi?

65
Bir nusxada siz o'zingizning qaydlaringizni sudo sh -c "du -ch/var/lib/docker/containers/*/* - json.log" orqali olishingiz mumkin.
qo'shib qo'ydi muallif Daniel F, manba

8 javoblar

bu savol dan foydalana oladigan yagona liner mavjud:

echo "" > $(docker inspect --format='{{.LogPath}}' )

Men Docker fayllarini to'g'ridan-to'g'ri o'zgartirishni yaxshi ko'raman. Docker siz uchun jurnallarni avtomatik ravishda aylantirishi mumkin. Agar siz standart JSON jurnali haydovchisi foydalanayotgan bo'lsangiz, dockerd uchun qo'shimcha bayroqlar bilan amalga oshiriladi./a>:

dockerd ... --log-opt max-size=10m --log-opt max-file=3

Siz buni

daemon.json ning bir qismi sifatida o'rnatishingiz mumkin. boshlash skriptlarini o'zgartirish o'rniga fayl:

{
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}

Ushbu faylni sozlash qo'llanilishi uchun o'zgartirgandan so'ng, systemctl reload docker dasturini ishga tushirishga ishonch hosil qiling.

94
qo'shib qo'ydi
xizmat docker qayta boshlash ni ishga tushirmadim. Bundan tashqari, tovar belgisi kuchga kirishidan oldin yangi idishlarni yaratish kerak edi. ya'ni eski konteynerlarni yetkazib berish yangi loglarni qo'llamagan
qo'shib qo'ydi muallif Robbo_UK, manba

Foydalanish:

truncate -s 0 /var/lib/docker/containers/*/*-json.log

Reference: Truncating a file while it's being used (Linux)

86
qo'shib qo'ydi
qisqartirish: "/var/lib/docker/containers/*/*-json.log" yozish uchun ochilmaydi: bunday fayl yoki katalog yo'q
qo'shib qo'ydi muallif BTR Naidu, manba
@BTRNaidu root/sudo sifatida ishga tushirishingiz kerak bo'lsa, containers tarkibi aksi hollarda mavjud emas.
qo'shib qo'ydi muallif spydon, manba
lol, bu xuddi rm -rf/root kabi juda yaxshi emas
qo'shib qo'ydi muallif kiltek, manba
Sizga sudo kerak, albatta, antennalar chiqishi va xavfni aniqlash kerak.
qo'shib qo'ydi muallif lucid_dreamer, manba
Yuqoridagi ikki professionalni e'tiborsiz qoldiring. Agar ishonchingiz bo'lmasa, "ls /var/lib/docker/containers/*/*-json.log" bilan qisqartirilgan narsalarni tekshirishingiz mumkin.
qo'shib qo'ydi muallif duketwo, manba
sudo sh -c "truncate -s 0/var/lib/docker/containers/*/* - json.log" - men uchun ishlagan
qo'shib qo'ydi muallif Jeff Shillitto, manba

Jurnallarni muntazam ravishda tozalash uchun logrotateni o'rnatishingiz mumkin.

/Etc/logrotate.d/docker-logs dagi misol fayl

/var/lib/docker/containers/*/*.log {
 rotate 7
 daily
 compress
 size=50M
 missingok
 delaycompress
 copytruncate
}
11
qo'shib qo'ydi
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
8
qo'shib qo'ydi
Dockerd/aufs bilan johil va qaytib kelgan jurnal fayllarini olib tashlashga qodir bo'lmaydigan muammolar bormi?
qo'shib qo'ydi muallif ThorSummoner, manba
Faqat sudo sh -c "du -ch/var/lib/docker/containers/*/* - json.log" faylini olish uchun faqatgina jurnallar sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log | grep total"
qo'shib qo'ydi muallif Daniel F, manba

Buni to'g'ridan-to'g'ri Docker buyrug'i orqali amalga oshira olmaysiz.

You can either limit the log's size, or use a script to delete logs related to a container. You can find scripts examples here (read from the bottom): Feature: Ability to clear log history #1083

Docker kompozitsiyasidagi faylning " kirish qismini tekshiring. ba'zi logging haydovchilari uchun parametrlar (masalan, kundalik aylanish va kundalik hajmi chegarasi) mumkin.

6
qo'shib qo'ydi

Agar root foydalanuvchi sifatida quyidagilarni bajarishga urinib ko'ring:

>  /var/lib/docker/containers/*/*-json.log

yoki

cat /dev/null > /var/lib/docker/containers/*/*-json.log

yoki

echo "" > /var/lib/docker/containers/*/*-json.log
4
qo'shib qo'ydi

Docker4Mac, 2018 yechimi:

LOGPATH=$(docker inspect --format='{{.LogPath}}' )
docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i -- truncate -s0 $LOGPATH

Birinchi qator qabul qilingan javobga o'xshash log faylini oladi.

Ikkinchi satr Docker4Mac ostida joylashgan barcha docker konteynerlari uchun host sifatida serverlarga xizmat qiluvchi xhyve VM da buyruqlarni ishlatishga imkon beruvchi nsenter kodini ishlatadi. Biz ishlatadigan buyruqlar Mac-bo'lmagan javoblardan tanish truncate -s0 $ LOGPATH .

Agar siz docker-compose dan foydalanayotgan bo'lsangiz, birinchi qator:

local LOGPATH=$(docker inspect --format='{{.LogPath}}' $(docker-compose ps -q ))

and is the service name from your docker-compose.yml file.

nsenter https://github.com/justincormack/nsenter1 orqali rahmat > hiyla-nayrang.

2
qo'shib qo'ydi
Yaxshi javob !!!
qo'shib qo'ydi muallif Merlevede, manba
Barcha konteynerlarning jurnallarini qisqartirish uchun boshqa javoblarda ko'rsatilgandek, qobiq joker belgisini ishlatishingiz mumkin, shuning uchun u faqat bitta buyruq: docker run -it -rm -privileged -pid = host alpine: nsenter -t 1 -m -u -n -i-sh -c 'truncate -s0/var/lib/docker/containers/*/* - json.log'
qo'shib qo'ydi muallif bradenm, manba

Mac foydalanuvchilari uchun docker, mana bu yechim:

    1. Find log file path by:

      $ docker inspect | grep log

    1. SSH into the docker machine( suppose the name is default, if not, run docker-machine ls to find out):

      $ docker-machine ssh default

    1. Change to root user(reference):

      $ sudo -i

    1. Delete the log file content:

      $ echo "" > log_file_path_from_step1

1
qo'shib qo'ydi
docker-mashinasi Mac uchun Docker bilan ishlamaydi. Buning o'rniga "docker run -ti -v/var/lib/docker/containers:/var/inception centos bash" ni ishga tushirishingiz mumkin, keyin "truncate --size 0/var/inception/08d29a7d469232cfef4456dc6eebcbf313bf01ba73e47 & zwnj; 08d29a7d469232cfef44 & & zwnj; 56dc6eebcbf313bf01ba & zwnj; 73e479520a036150c5ab & zwnj; 84de-json.log "
qo'shib qo'ydi muallif jamshid, manba