前言
最近我在研究 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 整合資料也在這個位置。
docker-desktop
儲存的是 Docker Desktop 的運行環境,而 docker-desktop-data
則是 Docker 所需的資料分區。
如果我們進入 overlay2
資料夾,就可以看到 GraphDriver 的 Layer 資料。
雖然可以在 Windows 中查看這些資料,但步驟比較多且不太方便。我們可以透過在 WSL 中掛載 Windows 的路徑來更方便地查看這些資料。
在 Windows 上掛載 docker-desktop
在 Windows 中,開啟 PowerShell,使用以下命令將 docker-desktop-data
資料夾掛載為網路磁碟機 H:
:
1net use h: \\wsl$\docker-desktop-data
Windows 的設定已完成,接下來處理 WSL 的部分。
在 WSL Ubuntu 中掛載 Windows 的資料夾
在 WSL Ubuntu 中,我們可以使用 mount
命令來掛載 Windows 的資料夾:
1sudo mkdir /mnt/docker2sudo mount -t drvfs h: /mnt/docker
然後,進入 overlay2
資料夾,使用 ls
命令,就可以查看到 layer 資料夾的內容。
什麼是 DrvFs?
DrvFs 是 WSL 的檔案系統外掛程式,設計目的是讓 WSL 和 Windows 的檔案系統互相兼容。DrvFs 可以讓 WSL 在/mnt
下掛載 Windows 的磁碟機,例如/mnt/c
、/mnt/d
等。