Назад | Перейти на главную страницу

Недостаточно места на инстансе EC2 из-за журналов докеров

Я все еще изучаю докер и AWS, и у меня некоторое время работал процесс докера с хранилищем EBS объемом 50 ГБ, и теперь у меня не хватает места на диске, и в результате докер больше не запускается, когда я перезагружаю свой экземпляр.

Когда я пытаюсь sudo du -h / | grep '[0-9\.]\+G' Я получил:

1.8G    /var/lib/docker/containers/f7cf0...
17G     /var/lib/docker/containers/55b7e...
2.8G    /var/lib/docker/containers/987b0...
22G     /var/lib/docker/containers/726b0...
44G     /var/lib/docker/containers
4.3G    /var/lib/docker/devicemapper/devicemapper
4.3G    /var/lib/docker/devicemapper
48G     /var/lib/docker
48G     /var/lib
48G     /var
0       /sys/bus/mdio_bus/drivers/Generic 10G PHY
50G     /

И когда я пытаюсь sudo docker ps -a Я получил:

Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

Не хочу касаться процесса 726b0 ..., это самое главное. Будет ли возникать проблема, если я удалю файл .log для 55b7e ...? Есть ли более чистый способ сделать это, чем просто удалить файл?

Если вы используете Эластичный бобовый стебель для запуска Docker это может вас заинтересовать.

Я принял команду Йонатана и превратил ее в .ebextensions cron, которое будет выполняться каждые X часов, и очистить журналы контейнера Docker, чтобы они не накапливались и не засоряли сервер. Мне пришлось изменить его, чтобы использовать tee чтобы избежать неоднозначное перенаправление ошибка bash.

Просто создайте .ebextensions каталог в корне вашего репозитория (рядом с Dockerrun.aws.json) и docker-log-truncate.config файл внутри него со следующим содержанием:

commands:
    add_docker_log_truncate_cronjob:
        command: "crontab -l | grep -q 'eb-docker' || (crontab -l ; echo '0 * */6 * * /bin/echo 0 | tee /var/log/eb-docker/containers/*/*.log')| crontab -"
        ignoreErrors: true

В этом случае команда будет запускаться каждые 6 дней и очищать журналы контейнера Docker. Обратите внимание, что я не смог обновить свой Elastic Beanstalk этим изменением до тех пор, пока я не отключил все затронутые серверы, вероятно, потому, что Beanstalk требуется некоторое свободное дисковое пространство для развертывания новой версии.

Я успешно выполнил echo '' > /var/log/eb-docker/containers/*/*.log на рабочем производственном сервере без каких-либо проблем, чтобы обрезать файл журнала размером 5 ГБ.

Вы можете добавить следующий раздел в свой файл запуска Docker:

"logConfiguration": {
    "logDriver": "json-file",
    "options": {"max-size": "100m", "max-file": "10"}
}

см. документацию для получения более подробной информации: https://docs.docker.com/config/containers/logging/json-file/