由于 docker 日志,EC2 实例空间不足

use*_*609 3 amazon-ec2 docker

我仍在学习 docker 和 AWS,我有一个 docker 进程在 50gb EBS 存储上运行了一段时间,现在我的磁盘空间不足,因此,当我重新启动我的实例时,docker 不再启动。

当我尝试时,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     /
Run Code Online (Sandbox Code Playgroud)

当我尝试时,sudo docker ps -a我得到:

Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
Run Code Online (Sandbox Code Playgroud)

我不想碰726b0...过程,这才是最重要的。如果我删除 55b7e... 的 .log 文件会导致问题吗?有没有比仅仅删除文件更干净的方法呢?

Ela*_*ava 7

如果您使用Elastic Beanstalk来运行 Docker,这可能会让您感兴趣。

我接受了 Yonatan 的命令并将其转换为.ebextensions每 X 小时运行一次的cron 作业,并清除 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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,该命令将每 6 天运行一次并清除您的 Docker 容器日志。请注意,在我终止所有受影响的服务器之前,我无法使用此更改更新我的 Elastic Beanstalk,这可能是因为 Beanstalk 需要一些可用磁盘空间来部署新版本。