一 Docker Desktop(WSL2)修改鏡像存儲位置
原文 https://blog.csdn.net/fleaxin/article/details/109812090
問題
隨着pull的鏡像增多,C盤空間被很快耗盡。
原因
因為我使用的是WSL2的版本,所以docker desktop在安裝的時候創建兩個wsl子系統,使用命令wsl -l -v --all:
docker-desktop是存放程序的,docker-desktop-data是存放鏡像的,這兩個wsl子系統都是默認放在系統盤的。
地址欄 \wsl$\docker-desktop 程序路徑
地址欄 \wsl$\docker-desktop-data 數據路徑
\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes 卷的位置
解決
刪除所有的image/container/wsl/hyperv數據:
導出wsl子系統鏡像:
wsl --export docker-desktop docker-desktop.tar
wsl --export docker-desktop-data docker-desktop-data.tar
刪除現有的wsl子系統:
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
重新創建wsl子系統:
wsl --import docker-desktop d:\your-install-path docker-desktop.tar
wsl --import docker-desktop-data d:\your-install-path docker-desktop-data.tar
重新運行docker desktop,然后pull一個鏡像,C盤不會變大了。
二 WSL 2 方式)數據卷存放位置及如何訪問
原文 https://blog.csdn.net/u013568383/article/details/113888776
https://www.cnblogs.com/xhznl/p/13184398.html
背景
以WSL2方式使用Docker Desktop for Windows確實帶來了更好的體驗,但同時也帶來新的問題。其中最典型的問題就是系統盤空間的占用越來越大。而且還有典型的內存問題。
最初沒有注意,也是因為沒有找到最根本的解決辦法,采用下面的配置粗略的應付了一下:
[wsl2]
memory=10GB
swapFile=D:\LocalCaches\wsl2\swap.vhdx
localhostForwarding=true
注:在當前系統的用戶下,新建.wlsconfig文件,在其中配置以上代碼。
實際上本質問題沒有解決。有一個碼友來詢問這個問題,才認認真真的考慮如何解決。
說明
默認情況下,Docker Desktop for Window會創建如下兩個發行版(distro):
docker-desktop
docker-desktop-data
如果訪問%LOCALAPPDATA%/Docker/wsl目錄,就可以看到兩個文件夾,同時每個文件夾中都會有一個vhdx文件。
%LOCALAPPDATA%/Docker/wsl就是當前登錄用戶的AppData\Local目錄,假設當前登錄的用戶為Administrator,那么這個目錄就是C:\User\Administrator\AppData\Local\Docker\wsl
data/ext4.vhdx 是被docker-desktop-data 發行版使用
distro/ext4.vhdx 是被 docker-desktop 發行版使用
docker-desktop-data 是被用來存儲docker images 以及相關的數據。因此,它的大小會隨着使用逐步增長,因此導致系統盤空間不足。
vhdx文件最大支持256G,超出這個大小將會出錯。參見:官方說明
解決步驟
1、刪除所有容器
可以使用命令,查看所有容器:
docker ps -a
或者
打開Docker Desktop for Window 的Dashboard界面,將該界面中的所有內容刪除。
這一步很重要,如果不這樣操作,進行后續操作的時候,要么提示網絡相關錯誤:cannot create a specific network,要么導入完成之后,vhdx文件會消失。
2、退出Docker Desktop
3、在控制台中,使用下面命令,關閉所有發行版
wsl --shutdown
4、檢查是否所有發行版都已經關閉。
wsl --list --verbose
命令可以查看到,實例效果如下:
D:\work>wsl --list --verbose
NAME STATE VERSION
docker-desktop Stopped 2
Ubuntu-18.04 Stopped 2
docker-desktop-data Stopped 2
D:\work>
5、備份已有image數據
通過下面命令,將已有的image數據,以tar格式備份已有數據到指定目錄。目錄根據自己實際情況指定。
wsl --export docker-desktop-data E:\docker-desktop\docker-desktop-data.tar
docker-desktop-data名字,就是上一步中,列舉出來的Docker Desktop存儲image的發行版
6、注銷當前的docker-desktop-data發行版
wsl --unregister docker-desktop-data
該命令執行完成之后,再次使用wsl --list --verbose命令查看,docker-desktop-data就已經不在了。
7、重新導入備份的docker-desktop-data
wsl --import docker-desktop-data E:\docker-desktop\data E:\docker-desktop\docker-desktop-data.tar --version 2
docker-desktop-data Docker Desktop存儲image的發行版
第二個路徑,即指定vhdx新的放置目錄。指定到目錄級別即可,不用指定vhdx名。
第三個路徑,指定第5步中備份的數據。
8、重新運行Docker Desktop
Docker Desktop 運行成功之后,查看新目錄中的vhdx的修改時間,如果修改時間是最新時間,就說明配置成功。