从Windows文件资源管理器访问Docker容器文件

Naf*_*fis 13 windows docker

如何从Windows文件资源管理器访问Docker容器文件夹和文件?

KHo*_*its 20

如果您在 Windows 上运行 Docker 桌面,Docker 容器不会在本地文件系统上本地运行,而是在 hyper-v 虚拟机上或通过 WSL2 运行。

Hyper-v(旧版)

理论上,如果您要停止 hyper-v vm,您可以打开 vhdx,如果您有正确的文件系统驱动程序,则挂载它并查看其中的文件。这在虚拟机运行时是不可能的。默认情况下,为 Linux 容器模式运行的操作系统被命名为“Docker 桌面”,但运行的是 busybox。

该文件可以在这里找到:

C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx
Run Code Online (Sandbox Code Playgroud)

WSL2(现代)

WSL 的东西略有不同,但差别不大。您仍在有效地使用虚拟环境。

然而,WSL 的一大优点是您实际上可以使用 Windows 资源管理器天真地浏览此文件系统。

通过浏览到 \\wsl$,您将能够看到您拥有的任何发行版的文件系统,包括 docker-desktop。

我机器上的 docker 文件系统似乎位于:

\\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2
Run Code Online (Sandbox Code Playgroud)

但是,显示原始文件系统和更改的覆盖“合并”视图似乎无法通过 Windows 资源管理器工作,并为您提供一个空白窗口。但是,您仍然可以看到“diff”文件夹,其中包含您的更改。

您可以使用来自 powershell 的 wsl 命令打开这些实例中任何一个的终端。

通过 Docker 访问

如果你想看看这个 Docker 操作系统和文件系统,一种方法是启动一个容器,它可以访问根操作系统,例如:

docker run -it --mount type=bind,source=/,target=/host ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

这应该会让你进入一个 Ubuntu docker 容器,它有一个 Bash 终端,它有 hyper-v 容器 (/) 的根目录,安装在路径“/host”上。往里面看,你会发现运行 docker 的虚拟机的 Busybox 文件系统,以及所有的容器。

由于 docker 的运行方式,您将能够访问每个容器的文件系统。如果您为容器使用 overlay2 文件系统,您可能会在此处找到每个容器的文件系统层:

/host/var/lib/docker/overlay2
Run Code Online (Sandbox Code Playgroud)

如果您想在 Windows 资源管理器中浏览文件,您应该能够配置此文件夹的 samba 导出,可从主机访问,可在此容器运行时访问。

然而,如果目标是能够浏览/编辑本地操作系统上的文件,并让它们在容器内更新,通常最简单的方法是将本地目录挂载到容器中。这可以与上面的示例类似地完成,但您首先需要进入 Docker 桌面设置,并启用将共享驱动器挂载到主机虚拟机中,然后在启动容器时提供卷参数。

如果您使用 WSL2,还有更多选项可供您使用,因为您可以将项目保留在 WSL 层内,同时从主机操作系统或通过 docker 与它们进行交互。这方面的最佳实践仍在不断变化,因此我将避免在此处提供直接建议。


Jas*_*onS 11

另一个相关问题的回复回答了这个问题: https: //stackoverflow.com/a/64418064/1115220

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\


Tho*_*mas -1

您应该使用安装卷。在您的docker run ....命令中,您可以指定安装卷。语法如下:

-v /主机/目录:/容器/目录

一个例子:

docker run -it -v C:\Users\thomas\Desktop:/root/home --name my_container image1

这将允许容器将文件写入 /root/home 并让它们出现在用户 thomas 的桌面上

  • 我相信 OP 希望使用 Windows 资源管理器探索容器中的文件。您的解决方案将允许查看容器内的主机文件,而不是相反。 (5认同)
  • 如果是这样的话,这应该是你答案的一部分。我想说的是答案中最重要的部分。目前来看,这是有误导性的。 (3认同)
  • OP 请求是特定的:**Windows 文件资源管理器** (2认同)