问题的发现
早上工作登录服务页面时报了个internal server error,然后登录服务器重启服务,控制台输出no space left on device,说设备没有空间了。
使用命令df -h 查看,果然看到/目录下空间占用率100%
使用 du -ahx .|sort -rh|head -5 ,输出前5个最大的文件和目录
root@ubuntu:/# du -ahx .|sort -rh|head -5
1.1T /var/lib/docker/containers/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03-json.log
13M /var/lib/docker/containers/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03
13M /var/lib/docker/containers
192K /var/lib/docker/containers/77e1b761688244b4f1f537b569adaa45b89aa6c676d4a025eabb4ef4a30fada9
160K /var/lib/docker/containers/77e1b761688244b4f1f537b569adaa45b89aa6c676d4a025eabb4ef4a30fada9/77e1b761688244b4f1f537b569adaa45b89aa6c676d4a025eabb4ef4a30fada9-json.log
可以看到下面这条输出,某个容器的日志文件占了1.1T把磁盘空间写满了
1.1T /var/lib/docker/containers/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03-json.log
解决
将 a3b5be6 这个容器删除,并重新创建即可。经过这次错误得留意了,日志输出做一些限制。
容器日志配置
配置容器的日志输出行为有两种方式,配置单个容器的日志、全局配置。
1、配置单个容器的日志
修改docker-compose.yml
services:
your_service:
# 其他配置
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
2、全局配置
可以修改 Docker daemon 的配置文件 /etc/docker/daemon.json。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
--log-opt max-size: 设置单个日志文件的最大大小。当日志文件达到这个值时,Docker 会自动轮换日志文件。
--log-opt max-file: 设置日志文件的最大数量。当达到这个值时,Docker 会删除最旧的日志文件。
记录一个docker容器日志输出导致磁盘占用100%的问题与解决方案