Во-первых, я использую docker 1.1.2 как для клиента, так и для сервера, этот ответ может быть устаревшим для более новых версий docker, поскольку docker развивается быстро.
Расположение файла
Найдите свой каталог докеров. В системах, использующих меткому стиль системы / Debian, пакет был установлен в хранилище докер https://get.docker.com/ubuntu
использования /var/lib/docker
. Скорее всего, каталог находится в том же месте в других системах (не может подтвердить).
под containers/**CONTAINER_ID**
вы найдете информацию о контейнере. В файле **CONTAINER_ID**-json.log
в этой папке вы найдете файл со всеми журналами для этого контейнера. Это может выглядеть как файл JSON, это не так. Это поток структур json, по одной на строку, каждая из которых содержит одну строку журнала (каждая строка заканчивается буквой a, }
а следующая начинается с a {
, поэтому это не является действительным json в целом).
Пример местоположения: - /var/lib/docker/containers/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6-json.log
Редактирование / изменение этого файла
Я предлагаю вам использовать этот путь, чтобы увидеть, влажнее это или нет, это причина, по которой у вас кончается свободное место, а не регистрировать их по очереди.
Я предпочел бы убедиться, что контейнер не регистрирует слишком много строк (используя CMD в файле docker, который либо перенаправляет вывод вашего процесса в файл тома, либо в / dev / null - с журналами, включенными в конфигурации - и Я бы тогда logrotate лог файлов с другим контейнером)
docker inspect
твой друг.docker inspect --format='{{.LogPath}}' $INSTANCE_ID
docker-machine
Вот простой однострочный файл журнала для очистки контейнера:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
источник
docker-machine ssh default "echo '' | sudo tee $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)"
docker logs
всегда пусто ...docker inspect --format='{{.LogPath}}' <container_name_or_id>
было полезно. Благодарность!если вы запустите
sudo lsof | grep '(deleted)'
, вы можете обнаружить, что Docker оставил открытыми множество файлов журналов контейнеров.Это журналы, которые принадлежат удаленному контейнеру. Один из способов закрыть их - перезапустить сам демон docker. Это не всегда возможно.
Другой способ освободить это пространство - найти соответствующий дескриптор файла и обрезать его:
Где
17511
pid docker иe49d81fc
является частью неверного имени файла журнала / контейнера. Здесь fd это / proc / 17511 / fd / 25, поэтому мы его усекаем:источник
: > /proc/17511/fd/25
Я использую Docker версии 1.13.0, сборка 49bf474
Если вы используете формат ведения журнала по умолчанию
json-file
, вы можете указать опцию, чтобы вращать ваши журналы.Вы можете настроить демон docker для этого или настроить его для каждого контейнера.
Например, размер файла журнала 2 МБ и максимум 5 файлов журнала:
Демон Docker: Создать файл
/etc/docker/daemon.json
:Docker работает:
Более подробную информацию см протоколирования и dockerd конфигурации
источник
Поздний ответ, но любому, находящемуся в одной лодке, может быть лучше изучить варианты экспорта своих журналов докера в удобное для них место. logspout полезен для сбора журналов из всех ваших док-контейнеров и отправки их куда-то. Если вам просто нужно это учесть, то отправка их демону системного журнала хоста может быть хорошим подходом, и вы можете использовать обычные механизмы для их размещения в файлах и их ротации оттуда. Для больших сред с несколькими хостами вы можете посмотреть доставку в стек ELK. то есть Elasticsearch, Logstash и Kibana.
источник
Чтобы найти местоположение докера, вы можете использовать:
Если вы хотите освободить место, вы можете сделать это следующим образом:
Теперь вы можете удалить контейнер с:
источник
Видел этот скрипт в официальной документации докера:
Работает хорошо, но докер не освобождает память автоматически ... Сценарий просто удаляет файлы журнала.
источник