最近遇到了两次空间不足导致docker实例下的mongodb运行失败的问题。
排查错误
首先用nettools看下mongodb端口有没有被占用:
sudo apt install net-tools
netstat --all --program | grep '27017'
原因和解决方案
系统日志文件太大
一般情况下日志文件不会很大,多在20M~200M以内。
运行 cd /var/log && ls -lahS
按大小排列一下日志文件,如果发现 var/log/btmp
太大(我的超过了1G)那就是中招了,可能是有人在暴力破解你的登录密码。
这里我使用较为简单的方式,修改掉默认ssh端口22(注意:ftp文件传输协议使用的端口默认也是22)为其他的,例如13202。如果有更好的方法稍后会补充。
先修改下ssh的默认端口,位置在:
nano /etc/ssh/sshd_config
在去VPS(云服务器)的管理面板防火墙删除掉22的入站规则,然后增加端口13202的入站规则:
Docker运行和缓存吃掉了所有剩余空间
- Docker自身运行过程中产生大量的build/pull缓存,而linux下安装的非docker-desktop版本(以我的Debian12为例)没有对镜像+缓存大小进行限制。
例如打开Windows版的Docker Desktop你可以看到:
解决方法:
使用docker system prune
手动清除不需要的
然后像docker desktop一样设定存储大小限制。我这里设置为了15G。
修改 sudo nano /etc/docker/daemon.json
(没有就新建)。直接粘贴进去如下内容:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": []
}
使用 sudo systemctl restart docker
重启docker服务即可