从Windows访问Docker容器文件

wwtsj6pe  于 2023-02-03  发布在  Docker
关注(0)|答案(5)|浏览(448)

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

axzmvihb

axzmvihb1#

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

Hyper-v(传统)

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

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

WSL 2(现代)

WSL的东西略有不同,但不是很多,您仍然在有效地与虚拟环境一起工作。
然而,WSL的一个很好的优点是,您实际上可以使用Windows资源管理器简单地浏览这个文件系统。
通过浏览到\wsl$,您将能够看到您拥有的任何发行版的文件系统,包括docker-desktop。
我机器上的Docker文件系统似乎位于:

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

然而,覆盖的“merged”视图,显示了原始文件系统与您的更改,似乎不能通过windows资源管理器工作,给你一个空白窗口,但你仍然可以看到“diff”文件夹,其中包含您的更改。
您可以从powershell使用wsl命令为这两个示例中的任何一个打开终端。

通过Docker访问

如果您想查看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与它们交互。最佳实践仍在变化中,所以我将避免在这里给出直接的建议。

disho6za

disho6za2#

另一个相关问题的答复回答如下:https://stackoverflow.com/a/64418064/1115220
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

p8h8hvxi

p8h8hvxi3#

我将给予一个WordPress应用程序作为一个例子,展示一个docer-compose.yaml文件的样本。为了让项目文件从docker容器显示在窗口中,你需要使用portsvolumes
注意音量和端口。
本地计算机的端口8000Map到容器内的80。
对于卷,windows上的./当前目录Map到容器映像文件。

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
qv7cva1a

qv7cva1a4#

在Windows Docker桌面上运行Windows容器时,我可以在这里看到所有的图像文件:
C:\ProgramData\Docker\windowsfilter
(需要管理员权限才能访问,删除/修改那里的任何东西都是不明智的)
此外,使用WizTree工具,可以很容易地看到每个图像层的真实的大小,甚至可以找到哪些特定的文件有助于层的大小。

htrmnn0y

htrmnn0y5#

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

  • v/主机/目录:/容器/目录
    举个例子:
    docker运行-it**-v C:\用户\thomas\桌面:/root/home**--命名我的容器图像1
    这将允许容器将文件写入/root/home,并使它们出现在用户thomas的桌面上

相关问题