【问题标题】:Windows Host Docker + WSL2 - How to mount Windows directory to a Linux containerWindows Host Docker + WSL2 - 如何将 Windows 目录挂载到 Linux 容器
【发布时间】:2021-06-02 05:24:13
【问题描述】:

我正在运行 Windows 10 作为我的主机,并且我正在尝试将 Windows 目录挂载到 Linux 容器(节点,基于 Debian)中。

以前,我使用 Hyper-V 后端和 dockerode 包与 Docker 守护进程交互,以将我的 Windows 目录挂载到我的容器中。我可以通过传入以下驱动程序选择行来创建 Docker 卷:

device: /host_mnt/d/path/to/my/dir

这里的关键字是/host_mnt。

我正在将我的开发转移到使用 Docker 开发容器和 WSL2,但是,host_mnt 路径不再被识别。将主机 Windows 目录挂载到我的 Linux 容器中的正确路径是什么?我正在运行 Docker Engine v20.10.3,在我的 Docker 设置中激活了使用基于 WSL 2 的引擎,并且我正在运行 Docker desktop 3.2.0 (61504)。

【问题讨论】:

  • 我应该说,通过 Docker CLI,我可以运行: docker run -v D:\Projects:/mnt/d -it python:3.8 /bin/bash 这行得通,我可以访问我的主机。更具体地说,我想通过 Docker 守护进程 REST API 来做到这一点。

标签: linux windows docker windows-subsystem-for-linux


【解决方案1】:

经过一番激烈的谷歌搜索/StackOverflowing,我找到了魔法咒语。

/run/desktop/mnt/host/${driveLetter}/path/to/my/windows/dir

其中 ${driveLetter} 是 Windows 中的驱动器号,但小写(例如 c、d、e 等)

也许我在某处遗漏了一些文档,但现在我可以在 Windows 主机上运行我的 Node 容器,并将我的文件从 Windows 主机直接挂载到我的容器中。

编辑:

上下文:

我的项目正在运行一个 Node 后端容器,它可以访问 Docker 守护进程来启动其他容器。此容器可以生成新容器(通过调用 Docker 守护程序)并停止容器。另一个职责是将一些目录挂载到新容器中。

我们通常部署在 Linux 环境中,但对于本地开发,我们使用 Windows。所以我们通常不关心这个,除非我们正在编写新的代码/调试。我们将一些本地 Windows 目录挂载到新生成的容器中(这是我想对原始问题做的)。通过 Node 和 Dockerode,我们调用 Docker Daemon 来创建 Container 端点,使用 HostConfig->Mounts->VolumeOptions->DriverConfig 和 Windows 中的路径。

【讨论】:

  • 请注意,不建议这样做。如果您挂载一个实际上位于 Linux 文件系统而不是 Windows 文件系统中的文件夹,您将获得更好的性能。
  • 如果您可以添加有关如何使用它的更多上下文(什么文件?什么工具?这是您需要的完整语法吗?),这个答案会更有用,所以您不需要为了理解它,已经熟悉了 WSL 和 Docker。提前谢谢你:)
  • @SiHa 没错。我们在 Windows 平台上开发,但在 Linux 环境上部署,所以这只是为了让它适用于我们的本地设置。如果我们实际上使用 Windows 作为我们的目标平台,我会将我们的设置转换为 Linux 文件系统。不管推荐的答案是什么,不知道让 WSL2 和 Docker 正常工作的正确路径,而不必挖掘大量的 stackoverflow,这令人沮丧。
  • @ÁlvaroGonzález,抱歉,我会用更多细节更新答案。
  • 如果你要挂载的文件夹不在/mnt/c下,而是在/home/justin等linux子系统下怎么办?
猜你喜欢
  • 1970-01-01
  • 2016-11-10
  • 2020-07-09
  • 2021-10-17
  • 2016-06-10
  • 2022-11-03
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多