Vinc3nt's Life

WSL 中的 Docker Layer 去哪了?掛載 Windows 目錄的解決方案

2024-10-27
develop
wsl
ubuntu
docker
docker-desktop
overlay
最後更新:2025-01-26
3分鐘
548字

前言

最近我在研究 Docker 的 GraphDriver 時,發現有些 Layer 資料夾在實際訪問時找不到具體的檔案或資料,這些資料應該包含容器的文件系統內容。

因為我不是在純 Linux 環境中使用 Docker,而是在 Windows 上透過 WSL 使用 Linux。我在 AWS EC2 上測試時,可以找到 GraphDriver 的相關資料路徑。比較了純 Linux 環境和 WSL 環境的差異後,我認為這可能是 Docker Desktop WSL 整合機制造成的。

Docker Desktop 的 WSL 整合

在 Docker Desktop 的 WSL 整合模式中,/var/lib/docker 資料夾其實位於 Docker Desktop 的虛擬機 (VM) 裡,而不是在 WSL 裡。這意味著,即使在 WSL 中使用 Docker 命令,Docker 的實際儲存資料(如映像檔和容器)也不會存放在 WSL 的檔案系統中,而是由 Docker Desktop 的 VM 來管理。因此,在 WSL 中無法直接查看 /var/lib/docker 的內容。

在 Windows 中,我們可以透過訪問 \\wsl$ 路徑來查看 WSL VM 的內容,Docker Desktop 的 WSL 整合資料也在這個位置。

default

docker-desktop 儲存的是 Docker Desktop 的運行環境,而 docker-desktop-data 則是 Docker 所需的資料分區。

如果我們進入 overlay2 資料夾,就可以看到 GraphDriver 的 Layer 資料。

default

雖然可以在 Windows 中查看這些資料,但步驟比較多且不太方便。我們可以透過在 WSL 中掛載 Windows 的路徑來更方便地查看這些資料。

在 Windows 上掛載 docker-desktop

在 Windows 中,開啟 PowerShell,使用以下命令將 docker-desktop-data 資料夾掛載為網路磁碟機 H:

Terminal window
1
net use h: \\wsl$\docker-desktop-data

default

Windows 的設定已完成,接下來處理 WSL 的部分。

在 WSL Ubuntu 中掛載 Windows 的資料夾

在 WSL Ubuntu 中,我們可以使用 mount 命令來掛載 Windows 的資料夾:

Terminal window
1
sudo mkdir /mnt/docker
2
sudo mount -t drvfs h: /mnt/docker

然後,進入 overlay2 資料夾,使用 ls 命令,就可以查看到 layer 資料夾的內容。

default

什麼是 DrvFs?
DrvFs 是 WSL 的檔案系統外掛程式,設計目的是讓 WSL 和 Windows 的檔案系統互相兼容。DrvFs 可以讓 WSL 在 /mnt 下掛載 Windows 的磁碟機,例如 /mnt/c/mnt/d 等。

參考資料

本文標題:WSL 中的 Docker Layer 去哪了?掛載 Windows 目錄的解決方案
文章作者:Vincent Lin
發布時間:2024-10-27