如何从Windows文件资源管理器访问Docker容器文件夹和文件?
axzmvihb1#
如果您在Windows上运行Docker Desktop,Docker容器不会在本地文件系统上运行,而是在hyper-v虚拟机上或通过WSL 2运行。
理论上,如果你要停止hyper-v vm,你可以打开vhdx,如果你有正确的文件系统驱动程序,挂载它并查看里面的文件。当虚拟机运行时,这是不可能的。默认情况下,运行Linux容器模式的操作系统命名为“Docker Desktop”,但运行的是busybox。该文件可以在这里找到:
C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx
WSL的东西略有不同,但不是很多,您仍然在有效地与虚拟环境一起工作。然而,WSL的一个很好的优点是,您实际上可以使用Windows资源管理器简单地浏览这个文件系统。通过浏览到\wsl$,您将能够看到您拥有的任何发行版的文件系统,包括docker-desktop。我机器上的Docker文件系统似乎位于:
\\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2
然而,覆盖的“merged”视图,显示了原始文件系统与您的更改,似乎不能通过windows资源管理器工作,给你一个空白窗口,但你仍然可以看到“diff”文件夹,其中包含您的更改。您可以从powershell使用wsl命令为这两个示例中的任何一个打开终端。
如果您想查看Docker操作系统和文件系统,一种方法是启动一个容器,该容器可以访问根目录下的操作系统,如下所示:
docker run -it --mount type=bind,source=/,target=/host ubuntu /bin/bash
这会把你拖到一个Ubuntu docker容器中,这个容器有一个Bash终端,它有hyper-v容器的根目录(/),挂载在路径'/host'上。查看内部,你会发现运行docker的虚拟机的Busybox文件系统,以及所有的容器。由于docker的运行方式,你可以访问每个容器的文件系统,如果你使用overlay 2文件系统,你可以在这里找到每个容器的文件系统层:
/host/var/lib/docker/overlay2
如果您想在windows资源管理器中浏览文件,您应该能够配置此文件夹的桑巴舞导出,可以从主机访问,可以在此容器运行时访问。但是,如果目标是能够在本地操作系统上浏览/编辑文件,并在容器内更新它们,通常最简单的方法是将本地目录挂载到容器中。这可以类似于上面的示例来完成,但您首先需要进入Docker桌面设置,并启用将共享驱动器挂载到主机虚拟机中。然后在旋转容器时提供volume参数。如果你正在使用WSL 2,还有一些选项可供你选择,你可以将你的项目保存在WSL层中,同时从主机操作系统或通过Docker与它们交互。最佳实践仍在变化中,所以我将避免在这里给出直接的建议。
disho6za2#
另一个相关问题的答复回答如下:https://stackoverflow.com/a/64418064/1115220\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
p8h8hvxi3#
我将给予一个WordPress应用程序作为一个例子,展示一个docer-compose.yaml文件的样本。为了让项目文件从docker容器显示在窗口中,你需要使用ports和volumes注意音量和端口。本地计算机的端口8000Map到容器内的80。对于卷,windows上的./当前目录Map到容器映像文件。
ports
volumes
8000
./
wordpress: depends_on: - db image: wordpress:latest volumes: ['./:/var/www/html'] ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress
qv7cva1a4#
在Windows Docker桌面上运行Windows容器时,我可以在这里看到所有的图像文件:C:\ProgramData\Docker\windowsfilter(需要管理员权限才能访问,删除/修改那里的任何东西都是不明智的)此外,使用WizTree工具,可以很容易地看到每个图像层的真实的大小,甚至可以找到哪些特定的文件有助于层的大小。
C:\ProgramData\Docker\windowsfilter
htrmnn0y5#
应使用装载卷。在docker run ....命令中,可以指定装载卷。语法如下:
docker run ....
5条答案
按热度按时间axzmvihb1#
如果您在Windows上运行Docker Desktop,Docker容器不会在本地文件系统上运行,而是在hyper-v虚拟机上或通过WSL 2运行。
Hyper-v(传统)
理论上,如果你要停止hyper-v vm,你可以打开vhdx,如果你有正确的文件系统驱动程序,挂载它并查看里面的文件。当虚拟机运行时,这是不可能的。默认情况下,运行Linux容器模式的操作系统命名为“Docker Desktop”,但运行的是busybox。
该文件可以在这里找到:
WSL 2(现代)
WSL的东西略有不同,但不是很多,您仍然在有效地与虚拟环境一起工作。
然而,WSL的一个很好的优点是,您实际上可以使用Windows资源管理器简单地浏览这个文件系统。
通过浏览到\wsl$,您将能够看到您拥有的任何发行版的文件系统,包括docker-desktop。
我机器上的Docker文件系统似乎位于:
然而,覆盖的“merged”视图,显示了原始文件系统与您的更改,似乎不能通过windows资源管理器工作,给你一个空白窗口,但你仍然可以看到“diff”文件夹,其中包含您的更改。
您可以从powershell使用wsl命令为这两个示例中的任何一个打开终端。
通过Docker访问
如果您想查看Docker操作系统和文件系统,一种方法是启动一个容器,该容器可以访问根目录下的操作系统,如下所示:
这会把你拖到一个Ubuntu docker容器中,这个容器有一个Bash终端,它有hyper-v容器的根目录(/),挂载在路径'/host'上。查看内部,你会发现运行docker的虚拟机的Busybox文件系统,以及所有的容器。
由于docker的运行方式,你可以访问每个容器的文件系统,如果你使用overlay 2文件系统,你可以在这里找到每个容器的文件系统层:
如果您想在windows资源管理器中浏览文件,您应该能够配置此文件夹的桑巴舞导出,可以从主机访问,可以在此容器运行时访问。
但是,如果目标是能够在本地操作系统上浏览/编辑文件,并在容器内更新它们,通常最简单的方法是将本地目录挂载到容器中。这可以类似于上面的示例来完成,但您首先需要进入Docker桌面设置,并启用将共享驱动器挂载到主机虚拟机中。然后在旋转容器时提供volume参数。
如果你正在使用WSL 2,还有一些选项可供你选择,你可以将你的项目保存在WSL层中,同时从主机操作系统或通过Docker与它们交互。最佳实践仍在变化中,所以我将避免在这里给出直接的建议。
disho6za2#
另一个相关问题的答复回答如下:https://stackoverflow.com/a/64418064/1115220
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
p8h8hvxi3#
我将给予一个WordPress应用程序作为一个例子,展示一个docer-compose.yaml文件的样本。为了让项目文件从docker容器显示在窗口中,你需要使用
ports
和volumes
注意音量和端口。
本地计算机的端口
8000
Map到容器内的80。对于卷,windows上的
./
当前目录Map到容器映像文件。qv7cva1a4#
在Windows Docker桌面上运行Windows容器时,我可以在这里看到所有的图像文件:
C:\ProgramData\Docker\windowsfilter
(需要管理员权限才能访问,删除/修改那里的任何东西都是不明智的)
此外,使用WizTree工具,可以很容易地看到每个图像层的真实的大小,甚至可以找到哪些特定的文件有助于层的大小。
htrmnn0y5#
应使用装载卷。在
docker run ....
命令中,可以指定装载卷。语法如下:举个例子:
docker运行-it**-v C:\用户\thomas\桌面:/root/home**--命名我的容器图像1
这将允许容器将文件写入/root/home,并使它们出现在用户thomas的桌面上