Docker: no space left on device
前言
最近在 build docker image 的時候遇到 No space left on device 的問題
因為在解的過程發現好像蠻多人都有遇過這個問題,於是就把解的過程記錄下來,希望能幫到其他人
今天在 build docker image 的時候出現這個錯誤
1 | ERROR: Could not install packages due to an EnvironmentError: [Errno 28] No space left on device |
因為是死在 pip install 這關,所以一開始先往 pip 的方向去找找到了以下這篇
[Errno 28] No space left on device #5816
裡面看起來是在說當不是用 root 安裝時,會遇到 tmp 資料夾空間不足的問題,裡面大概提供了兩種解法:
- 在家目錄底下開一個新的 tmp 資料夾,然後讓系統使用該資料夾來解決 tmp 空間不足的問題
- pip install –no-cache-dir
最後覺得第一個太麻煩了(因為我是在 docker 裡面),所以選第二個
但是問題沒解決,接著只把這段再加上 docker 拿去餵狗
1 | No space left on device |
接著看到好像真的是 docker 的問題,因為蠻多人都遇過的
看起來是因為 docker 會先配置一些空間用來暫存資料,然後這個空間被塞爆後就會報這個錯誤
於是我看了這篇
Docker error : no space left on device
然後先試了
1 | > docker system prune |
可以從輸入後的結果來看到這個指令將會刪除
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
如果上面這些東西還有要用的話這條路可能就行不通
總之我執行了之後空間好像還是不夠
接著照著這篇
https://success.docker.com/article/no-space-left-on-device-error
先找出哪些 container 的 log 檔最大
1
du -d1 -h /var/lib/docker/containers | sort -h
大概會看到這種東西
1
2
3
4
5
6
7
8
936K /var/lib/docker/containers/46d7350f4e7cd7c5c473ace07a58b74e20cb2edff7c2484c5a6e547f86ce17f3
40K /var/lib/docker/containers/c88c6163611685271f853a130a411cb497faf232741a9266afe9534b43b7f9c9
44K /var/lib/docker/containers/0819596cafb92e67b1f24890e6a19b91e1aad2ed77aba6a21e785d7f5d8319d1
44K /var/lib/docker/containers/137ac90cc4d23fdbfc02231edb6224dee1f9e5c088ad9245b8b0909f9b7ae74c
116K /var/lib/docker/containers/2384b475573521048658e4ef91f61ec3ef96d151ca9fab9acf751a74ae7bc8e3
148K /var/lib/docker/containers/ea1cf3adba3d5f2451486f826cb3c24e9e443d719bbda2af7fe51de6a5597b74
340K /var/lib/docker/containers/d920fa2ff4455d50d75e40fbce1fd8414b84b32f272718fc83abfd707bbcebd5
668K /var/lib/docker/containers/8eec417b6620ff884f0a8777a0e22d70ef8560af888859bbb154db54e21b26ad
166M /var/lib/docker/containers/ad0f644b4b97f93ca6fbfc367ee42780b2bd8bd056fb8457b922df7cf3e996f8找出最佔空間的 log 檔,然後搭配
1
docker ps
確定是哪個 container 的 log 檔且確定不需要了之後執行以下指令來清除 log 檔
1
cat /dev/null > /var/lib/docker/containers/<container_id>/<container_log_name>
如果權限不足的話可能要用以下指令
1
sudo sh -c "cat /dev/null > /var/lib/docker/containers/<container_id>/<container_log_name>"
刪完後再執行一次以下指令確認 log 檔已經被刪除
1
du -d1 -h /var/lib/docker/containers | sort -h
然後…還是失敗,於是決定換個思路
1 | df |
結果原來是 ubuntu 的空間快被吃光了..
然後照著這篇做
7 Simple Ways to Free Up Space on Ubuntu and Linux Mint
先清 apt
1
2sudo apt-get autoremove
sudo apt-get autoclean接著清 log
1
2
3
4
5# 看 log 檔佔多少空間
journalctl --disk-usage
# 刪除超過三天的 log 檔
sudo journalctl --vacuum-time=3d
再 build 一次就成功了QQ