Как правильно очистить журналы для контейнера Docker?
Я использую docker logs [container-name]
для просмотра журналов конкретного контейнера.
есть ли элегантный способ очистить эти журналы?
8 ответов:
С этот вопрос есть один лайнер, который вы можете запустить:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
Я не большой поклонник изменения файлов Docker напрямую. Вы можете иметь Докер автоматически поворачивать журналы для вас. Это делается с дополнительными флагами в dockerd, если вы используете значение по умолчанию JSON logging driver:
dockerd ... --log-opt max-size=10m --log-opt max-file=3
вы также можете установить это как часть вашей демон.json файл вместо изменения вашего запуска скрипты:
{ "log-driver": "json-file", "log-opts": {"max-size": "10m", "max-file": "3"} }
обязательно запустите
systemctl reload docker
после изменения этого файла, чтобы применить настройки.
вы можете настроить logrotate для периодической очистки журналов.
пример файла в /etc / logrotate.д/докер-журналы
/var/lib/docker/containers/*/*.log { rotate 7 daily compress size=50M missingok delaycompress copytruncate }
вы не можете сделать это непосредственно через команду Docker.
вы можете либо ограничить размер журнала, либо использовать скрипт для удаления журналов, связанных с контейнером. Вы можете найти примеры скриптов здесь (Читайте снизу):особенность: возможность очистить историю журнала #1083
Проверьте вкладка "протоколирование" ссылки на файл docker-compose, где вы можете указать параметры (например, поворот журнала и ограничение размера журнала) для некоторых журналов водители.
как root пользователь, попробуйте выполнить следующее:
> /var/lib/docker/containers/*/*-json.log
или
cat /dev/null > /var/lib/docker/containers/*/*-json.log
или
echo "" > /var/lib/docker/containers/*/*-json.log
Docker4Mac, решение 2018 года:
LOGPATH=$(docker inspect --format='{{.LogPath}}' <container_name_or_id>) docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i -- truncate -s0 $LOGPATH
в первой строке отображается путь к файлу журнала, аналогичный принятому ответу.
вторая строка использует
nsenter
что позволяет запускать команды вxhyve
VM, что серверы в качестве хоста для всех контейнеров docker под Docker4Mac. Команда, которую мы запускаем, является знакомойtruncate -s0 $LOGPATH
из ответов, отличных от Mac.если вы используете
docker-compose
первая строка будет:local LOGPATH=$(docker inspect --format='{{.LogPath}}' $(docker-compose ps -q <service>))
и
<service>
- это имя службы из .спасибо https://github.com/justincormack/nsenter1 для
nsenter
трюк.
Docker для пользователей Mac, вот решение:
найти путь к файлу журнала:
$ docker inspect | grep log
SSH в машину docker( предположим, что имя
default
, если нет, запуститеdocker-machine ls
узнать):
$ docker-machine ssh default
изменить на пользователя root (ссылка):
$ sudo -i
удалить содержимое файла журнала:
$ echo "" > log_file_path_from_step1