Долго работающие контейнеры Docker могут быстро накапливать большое количество логов.
Они потребляют емкость хранилища и снижают производительность при доступе к данным и их фильтрации.
Хотя Docker содержит встроенные инструменты для просмотра логов, в нем нет встроенного механизма для их очистки.
В этой статье вы узнаете, как очистить логи запущенных контейнеров Docker, не перезапуская и не заменяя их.
Вы также увидите некоторые методы более эффективной работы с большими журналами, сохраняя при этом старые данные.
Как найти лог определенного контейнера Docker
Сначала найдите путь к файлу журнала целевого контейнера.
Вы можете получить путь к файлу лога контейнера под названием my-app, выполнив следующую команду:
Очистка файла лога
Вы можете очистить содержимое журнала, не удаляя его, передав echo пустую строку в его содержимое.
Владельцем файла будет root, поэтому вам нужно будет выполнить эту операцию в оболочке root.
Следующая команда очистит файл журнала:
Интерполяция оболочки используется для динамического получения пути к файлу журнала для контейнера my-app.
Вместо этого вы можете вручную подставить путь, полученный ранее.
Когда вы запустите docker logs my-app, вы увидите пустой вывод, если только контейнер не возобновил запись строк за прошедшее время.
Ограничение вывода логов
Команда docker logs принимает несколько аргументов, которые можно использовать для ограничения вывода захламленных журналов.
Это поможет уменьшить необходимость очистки журнала и предотвратить переполнение терминала старыми строками при каждом обращении к файлу.
- –tail – Этот флаг указывает Docker выводить только определенное количество старых строк журнала, начиная с самой последней.
- –until и –since – Эти флаги ограничивают вывод строками журнала, выведенными за определенный период времени. Они полезны, когда вы знаете приблизительные временные рамки, в которые произошло событие.
Вот несколько примеров:
Отображение 100 последних строк журнала
Отображение строк журнала, записанных за последний час
Настройка ротации логов
Многие драйверы логирования Docker, включая json-file, имеют опциональную поддержку ротации логов, которую можно включить глобально для демона Docker или на основе каждого контейнера.
Параметры демона настраиваются в файле /etc/docker/daemon.json.
Вот пример, который ротирует логи контейнеров, когда они достигают 8 МБ.
В каждый момент времени сохраняется до пяти файлов, при этом старые файлы автоматически удаляются при новой ротации.
{ "log-opts": { "max-size": "8m", "max-file": "5" } }
Перезапустите демон Docker, чтобы применить изменения:
Ротация на уровне демона применяется ко всем вновь созданным контейнерам.
Изменения не затронут контейнеры, которые уже существуют на вашем хосте.
Ротация может быть настроена для отдельных контейнеров с помощью флагов –log-opts.
Они отменяют настройки демона Docker по умолчанию.
Заключение
Вы можете очищать файлы логов, используя команды оболочки для удаления их содержимого.
Однако лучше настроить ротацию, чтобы это происходило автоматически по достижении файлами определенного размера.
Команда docker logs также поддерживает флаги, которые могут помочь укротить громоздкие логи.
см. также:
- 🐳 Почему процессы в контейнерах Docker не должны запускаться от имени Root
- 🐳 Как проверить изменения в файловой системе контейнера Docker
- 🐳 Как просмотреть историю событий Docker
- 🐳 Как автоматически обновлять контейнеры Docker из реджестри образов
- 🐳 Как запустить несколько контейнеров Docker на разных IP-адресах
- 🐳 Как использовать Docker с UFW параллельно
- 🐳 Как запустить несколько служб в одном контейнере Docker
- 🐳 Как установить Docker на Kali Linux
- 🐳 Полезные примеры использования команды Docker ps
truncate –size 1G $(docker inspect –format='{{.LogPath}}’ $(docker ps –format='{{.ID}}’)
Оставит 1 гигабайт логов во всех запущеных конетейнерах
Спасибо за дополнение