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

我还在学习docker和AWS,而且我有一个docker进程运行一段时间,有50GB的EBS存储空间,现在我的磁盘空间不足了,所以当我重新启动实例时,docker不再启动。

当我尝试sudo du -h / | grep '[0-9\.]\+G' 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 …过程,这是最重要的。 如果我删除55b7e的.log文件会导致问题吗? 有一个更清洁的方式来做到这一点,而不是只是删除文件?

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

我采取了Yonatan的命令,并将其转换为每隔X小时运行一次的.ebextensions cron作业,并清除Docker容器日志,以防止它们累积并阻塞服务器。 我不得不修改它使用tee以避免模糊的redirect bash错误。

只需在存储库根目录( Dockerrun.aws.json旁边)和一个Dockerrun.aws.json docker-log-truncate.config文件中创build一个.ebextensions目录,其中包含以下内容:

 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需要一些可用磁盘空间来部署新版本。

为了截断5gb日志文件,我已成功在活动生产服务器上执行了echo '' > /var/log/eb-docker/containers/*/*.log ,没有任何问题。