如何限制Docker容器磁盘占用?Cassandra容器致Windows磁盘满
解决Docker中Cassandra容器导致Windows磁盘占用100%的问题
核心原因
Cassandra默认的预写日志(WAL)、自动快照和无限制的数据写入配置,在Windows Docker环境下会快速耗尽磁盘空间,尤其是WSL2后端的容器存储机制会放大这个问题。
具体解决方案
1. 调整Cassandra核心配置限制磁盘写入
- 先将容器内的配置文件复制到本地:
docker cp cassandra:/etc/cassandra/cassandra.yaml ./cassandra.yaml - 编辑本地
cassandra.yaml,修改以下关键参数:commitlog_total_space_in_mb: 1024:限制预写日志总大小为1GB,达到上限后自动清理旧日志auto_snapshot: false:禁用自动快照,避免压缩或升级时生成大量快照文件snapshot_before_compaction: false:关闭压缩前的自动快照disk_failure_policy: stop:磁盘满时停止写入,防止无限制占用空间
- 挂载修改后的配置重新启动容器:
docker stop cassandra docker run -p 9042:9042 --rm --name cassandra -d -v $(pwd)/cassandra.yaml:/etc/cassandra/cassandra.yaml cassandra:4.0.7
2. 为Docker容器设置磁盘配额
- 如果使用Docker Desktop(WSL2后端),可以在Settings > Resources > Advanced中直接设置容器的磁盘使用上限
- 或者启动容器时通过命令行指定配额(需要WSL2支持):
docker run -p 9042:9042 --rm --name cassandra -d --storage-opt size=20G cassandra:4.0.7
3. 清理已占用的磁盘空间
- 进入容器手动清理冗余文件:
docker exec -it cassandra bash # 清理旧预写日志 rm -rf /var/lib/cassandra/commitlog/* # 清理所有快照 rm -rf /var/lib/cassandra/snapshots/* - 使用Cassandra工具优化数据文件:
docker exec cassandra nodetool cleanup docker exec cassandra nodetool compact
内容的提问来源于stack exchange,提问作者Florin Nicula
相关产品推荐
相关产品推荐

