Docker 啓動拋出異常:設備空間不足

Error response from daemon: Cannot start container xxx: write /var/lib/docker/containers/xxxxx/hash281480960: no space left on device
Error: failed to start containers: [xxx]

1.開始排查:df -h

[root@iZbp13ks1ssZ root]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 40G 0 100% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/vdb1 493G 289G 179G 62% /mnt
如圖系統盤40G被佔用完,基本可以確定啓動異常原因和系統盤有關係

2.繼續排查:docker info

查看信息,可以分析出可用磁盤容量 Data Space Available、 Metadata Space Available 僅剩 16.78 MB,所有導致沒有足夠的空間進行加載啓動docker鏡像。

docker system df #查看docker 佔用空間 (注意:此操作會刪除所有停止的容器)

Usage: docker system COMMAND ##使用Docker System命令,查看docker現在硬盤狀態
Manage Docker
Commands:
df Show docker disk usage
events Get real time events from the server
info Display system-wide information
prune Remove unused data

3.解決辦法

a.清理無效數據文件,釋放磁盤空間(我這邊採用的清除日誌,大概35G日誌)
找到容器位置,查看容器下文件夾總大小,大概34G,很明顯不正常
最終定位到xxxxx-json.log文件,經 vi 查閱該日誌可清除,rm 清除後 docker info

或 cd / ,在根目錄下查看哪個文件夾佔用內存大du -h --max-depth=1

b. 修改docker配置文件,修改data路徑

關掉所有正在運行的容器
docker stop $(docker ps -q -f status=running)

關閉docker服務
systemctl stop docker

將Docker現目錄挪到一個新目錄下,這兩個目錄依照具體情況而定,我的分別是/var/lib/docker和/home/docker
mv /var/lib/docker /home/docker

將原來的數據備份一份,備份大法好,萬一不行還不至於損壞數據
tar zcf docker_file_bak.tar.gz /home/docker

修改服務啓動命令,服務的service文件爲/lib/systemd/system/docker.service,將裏面的內容ExecStart=/usr/bin/dockerd修改爲如下:
ExecStart=/usr/bin/dockerd -g 新目錄

重新加載修改後的service文件
systemctl daemon-reload

啓動Docker服務
systemctl start docker

驗證修改成功
docker info | grep “Docker Root Dir”

c. docker文件佔用大,可以將docker停掉後將文件夾移動到data目錄下,然後建一個超鏈接過去。

首先,先停掉docker服務
service docker stop

然後,將docker目錄放到/data 目錄下
mv /var/lib/docker /data/

然後,建立軟連接
ln -s /data/docker /var/lib/docker

然後,在/var/lib/ 下輸入 sudo ls -lh |grep docker , 查看文件
lrwxrwxrwx 1 root root 11 Feb 19 19:35 docker -> /data/docker

這樣就可以啓動docker服務了

sudo service docker start

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章