背景:測試服務器突然mongodb和mysql連接不上,出現了問題,卡的一批。查看日誌發現,docker根目錄磁盤被佔滿,提示no space left on device(磁盤空間不足)。
[root@bogon /]# df -h
文件系統 容量 已用 可用 已用% 掛載點
overlay 50G 50G 1M 100% /home/docker/lib/docker/overlay/fdbed49072631b3b95b3629ebe8aaf7c55c63decb56e17c17d4f41ef2e3f45b8/merged
overlay 50G 50G 1M 100% /home/docker/lib/docker/overlay/0b196569723e4529025ae93ed17f08d55e9cb3c6654c3d7d7d90f71e8da5bd0c/merged
查看磁盤使用情況命令:
df -h
解決方案:
磁盤滿了,是因爲docker默認ROOT目錄是:/var/lib/docker ,我這邊測試服務器所在磁盤50GB,很快就被佔滿了。
所以,需要遷移docker目錄到更大的磁盤上。
1 停止docker服務。
systemctl stop docker
2 創建新的docker目錄,執行命令df -h,找一個大的磁盤。 我在 /home目錄下面建了 /home/docker/lib目錄,
3 遷移/var/lib/docker目錄下面的文件到 /home/docker/lib:
rsync -avz /var/lib/docker /home/docker/lib/
遷移完成後:發現原來docker目錄下的內容被複制過來了。
[root@bogon docker]# pwd
/home/docker/lib/docker
[root@bogon docker]# ls
containers image network overlay plugins swarm tmp tmp-old trust volumes
[root@bogon docker]#
4.通過修改 docker daemon的配置文件的方式來保存我們修改,方法如下:
docker daemon 會有一個默認的configuration 文件,此外,我們可以新建一個名爲“daemon.json”的文件,我們在這個文件中定義的屬性,會覆蓋默認配置文件的配置信息。
進入到/etc/docker,新建並編輯daemon.json文件:
cd /etc/docker
vim daemon.json
添加如下配置到文件中:"graph"的值就是你指定的新的docker ROOT目錄。
{
"graph": "/home/docker/lib/docker"
}
重載配置:
systemctl daemon-reload
重啓docker服務
systemctl restart docker
最後,查看docker info的信息,如下圖,已經是最新的設置了。
再次查看磁盤信息df -h, 發現已經是遷移到了最新磁盤上。
最後,啓動對應容器,測試連接,均正常。
END