Skip to content

日志与磁盘清理

先看谁占的

bash
docker system df
docker system df -v      # 详细到每个镜像 / 卷
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail

容器日志无限增长

默认 json-file 驱动不限大小。全局设置在 /etc/docker/daemon.json

json
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "20m", "max-file": "3" }
}

改完 systemctl restart docker只对之后新建的容器生效,老容器要重建。

单个服务在 compose 里设:

yaml
logging:
  driver: json-file
  options:
    max-size: "20m"
    max-file: "3"

清理

bash
docker image prune          # 悬空镜像
docker image prune -a       # 所有没被容器用的镜像
docker container prune      # 停掉的容器
docker volume prune         # 没被引用的卷(小心,数据可能在里面)
docker builder prune        # 构建缓存
docker system prune -a      # 上面全部一起(不含卷)

volume prune 之前先 docker volume ls 看一眼,确认没有手动创建但暂时没挂载的卷。

journald 也会吃磁盘

bash
journalctl --disk-usage
journalctl --vacuum-size=200M

一台 1C1G 的小机器

内存紧的话:

  • 别跑 latest,钉版本,避免更新后内存需求突然涨
  • docker stats 看谁占内存
  • 加 swap 兜底:
bash
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

个人笔记,写给未来忘事的自己。