从Windows访问Docker容器文件

问题描述 投票:16回答:2

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

windows docker
2个回答
3
投票

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

超虚拟机(传统的

理论上,如果你要停止hyper-v vm,你可以打开vhdx,如果你有正确的文件系统驱动,就可以挂载它并查看里面的文件。 这在虚拟机运行时是不可能做到的。 默认情况下,运行Linux容器模式的操作系统名为 "Docker Desktop",但运行的是busybox。

这个文件可以在这里找到。

C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx

WSL2(现代)

WSL的情况略有不同,但不多。 你仍然有效地在一个虚拟环境中工作。

然而,WSL的一个很好的优点是,你实际上可以用Windows Explorer天真地浏览这个文件系统。

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

我的机器上的docker文件系统似乎是活的。

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

然而,覆盖 "合并 "视图,显示原始文件系统和你的更改, 似乎不能通过windows资源管理器工作,给你一个空白窗口。 然而,你仍然可以看到 "diff "文件夹,其中包含你的更改。

你可以通过使用wsl命令,从powershell打开一个终端到这些实例中的任何一个。

通过Docker访问

如果你想看看这个Docker操作系统和文件系统,一种方法是旋转一个容器,它可以在根部访问操作系统,就像这样。

docker run -it --mount type=bind,source=/,target=/host ubuntu /bin/bash

这应该会让你进入一个Ubuntu的docker容器,用一个Bash终端,其中有一个超v容器的根目录,安装在路径 "host "上。 看里面,你会发现运行docker的虚拟机的Busybox文件系统,以及所有的容器。

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

/host/var/lib/docker/overlay2

如果你想在windows资源管理器中浏览文件,你应该能够配置一个samba导出的这个文件夹,可以从主机上访问,可以在容器运行时访问。

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

如果你使用的是WSL2,你还有一些更多的选择,因为你可以将你的项目保持在WSL层里面,同时从主机操作系统或者通过docker与它们进行交互。 这方面的最佳实践还在不断变化中,所以我将避免在这里给出直接的建议。


0
投票

你应该使用一个挂载卷。在你的 docker run .... 命令,你可以指定一个挂载卷。语法如下。

-v hostdirectory:containerdirectory

一个例子。

docker run -it -v C:/Users/thomasDesktop:roothome --name my_container image1

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

© www.soinside.com 2019 - 2024. All rights reserved.