最近遇到了兩次空間不足導致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服務即可