WSL 上的 Docker。想要使用 WSL 在 Windows10 上挂载适用文件夹

WSL 上的 Docker。想要使用 WSL 在 Windows10 上挂载适用文件夹

我在 Windows 上使用 WSL,同时使用 Docker。

我采用这个解决方案

https://stackoverflow.com/questions/50540721/docker-toolbox-error-response-from-daemon-invalid-mode-root-docker

因此,我尝试通过 WSL 上的 Docker 将“mounted_folder”与“file_at_host”文件挂载在此处。就像...

docker run -it -v //C/Users/<username>/Desktop/mounted_folder://new_dir <image> bash 
docker run -it -v /C/Users/<username>/Desktop/mounted_folder:/new_dir <image> bash

但是正如您在下图中看到的,ls 命令没有显示任何文件。

文件夹如何在 CONTAINER 中挂载

另一方面,我尝试在命令提示符上做同样的事情。

docker run -it -v C:\Users\<username>\Desktop\mounted_folder:/new_dir <image> bash

然后我可以使用 ls 命令找到“file_at_host”文件。

文件夹如何在 CONTAINER 中挂载

怎么会这样呢?

并且,docker 在挂载文件夹时指的是哪个文件夹?

我可以在 Windows GUI 上找到该文件夹​​吗?

类似地,我尝试使用 WSL 通过 docker 挂载一个文件夹,并在容器中创建“something.ipynb”文件。

docker run -p 8888:8888 -v /c/Users/<username>/Desktop/ds_python:/work --name my-lab <image>

而且我在 Windows GUI 上找不到“something.ipynb”文件,它应该位于适用的文件夹“ds_python”中。

但是,当我尝试使用 WSL 通过 Docker 挂载“桌面”时,我发现“something.ipynb”文件存在。

文件夹如何在 CONTAINER 中挂载

如上图所示,出现了“something.ipynb”文件,但我在 Windows GUI“C:\Users\Desktop\ds_python”上找不到它。

我怎样才能突破这一困境?

“C:\Users\Desktop” 和 “/c/Users//Desktop/” 不同吗?

那么我如何在Windows上看到后者?

此外,如何通过 Docker 在 Windows 上使用 WSL 挂载适用的文件夹?

答案1

如果你使用的是 WSL2,则 Windows 驱动器将暴露在 /mnt 端点上

 ls -lah /mnt
total 12K
drwxr-xr-x 10 root   root   4.0K Nov 13 13:13 .
drwxr-xr-x 17 root   root   4.0K Dec 12 11:12 ..
drwxrwxrwx  1 sathya sathya  512 Dec  6 12:47 c
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 d
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 e
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 f
drwxrwxrwx  1 sathya sathya  512 Dec  2 10:31 g
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 h
drwxrwxrwx  2 root   root   4.0K Nov 13 13:13 i
drwxrwxrwt  2 root   root     40 Dec 12 11:12 wsl


要挂载 Windows 文件,您可以使用与上面提到的相同的格式,即提供完整路径,包括/mnt作为绑定挂载的前导,

docker run -it -v /mnt/c:/host/c alpine sh

这样,您的 C 盘就被挂载到容器中的 /host/c 了。

ls -lah /host/c

drwxrwxrwx    1 1000     1001         512 Dec 15 07:42 .
drwxr-xr-x    3 root     root        4.0K Dec 15 10:35 ..
lrwxrwxrwx    1 1000     1001          12 Sep 29  2018 Documents and Settings -> /mnt/c/Users
dr-xr-xr-x    1 1000     1001         512 Dec  9 16:54 Program Files
dr-xr-xr-x    1 1000     1001         512 Nov 13 11:03 Program Files (x86)
drwxrwxrwx    1 1000     1001         512 Nov  7 13:26 ProgramData
dr-xr-xr-x    1 1000     1001         512 Oct  2 08:39 Users
dr-xr-xr-x    1 1000     1001         512 Dec 15 07:43 Windows

答案2

首先,我在指定挂载文件夹时采用的 Stack Overflow 解决方案是旧信息,并且是关于 Docker Toolbox 的,而不是针对 WSL 的。

所以,我发现它不适用于我的情况。

其次,我应该指定 WSL 上的挂载文件夹,例如......

docker run -it -v /mnt/c/Users/'username'/desktop/mounted_folder:/new_dir <image> bash

第三,如果我指定挂载文件夹,例如,

/c/Users/'username'/desktop/mounted_folder

我可以通过以下路径检查 GUI 上的文件夹,

\\wsl$\Ubuntu\c\Users\'username'\desktop\mounted_folder

探索结果图像

我应该输入\\wsl$\Ubuntu~,因为 WSL 的发行版是 Ubuntu。不过已经安装了 Ubuntu-20.04。

的结果wsl --list -v

wsl --list -v 结果的屏幕截图

如果我指定安装的文件夹,例如,

/mnt/c/Users/'username'/desktop/mounted_folder

我可以通过以下路径检查 GUI 上的文件夹,

C:\Users\'username'\Desktop\mounted_folder

在前一种情况下,如果您想在 Windows 命令行上检查已安装的文件夹,则应使用 PowerShell。而不是命令提示符。

命令提示错误

相关内容