Docker编写可以在主机窗口上找到的卷

kninwzqo  于 2023-05-16  发布在  Docker
关注(0)|答案(3)|浏览(155)

我有一个docker-compose文件,其中包含给定容器的volumes部分:

video-streaming:
image: video-streaming
build:
  context: ./video-streaming
  dockerfile: Dockerfile-dev
container_name: video-streaming
volumes:
    - /tmp/history/npm-cache:/root/.npm:z

我在windows上运行docker,图像是基于linux的。当我进入容器并将文件添加到/root/.npm,然后关闭容器并再次运行它时,文件仍然存在,因此该卷可以工作。但问题是我在哪里可以找到它的位置在Windows主机?

mzillmmw

mzillmmw1#

您应该在C:\ProgramData\docker\volumes中找到卷。文件名将是一个散列,您可以使用docker inspect进行检查。
如果没有,请注意,您只是将主机目录/tmp/history/npm-cache挂载到容器中。此目录是您的卷。

368yc8dk

368yc8dk2#

当使用docker for windows时,问题是你使用的是旧的Docker Toolbox还是使用WSL/WSL 2的新工具箱

Docker Desktop配置Linux Containers和WSL/WSL 2

Docker引擎实际上并不在Windows上运行,但在WSL示例内部,docker桌面使docker命令在Windows上可用,以便于使用。所以卷可能在WSL示例(linux)中
你可以通过在powershell中输入wsl -l来找出你有哪些WSL示例。他们的文件系统在Windows上的\\\wsl$路径中可用。
在您的示例中,卷没有命名,它位于您为其指定的确切位置。
/tmp/history/npm-cache,但在安装了docker引擎的WSL示例中。

通过WSL

在Powershell编写wsl ls /tmp/history中,您应该在那里看到npm-cache
wsl命令允许在实际的linux wsl示例(默认值)上运行的linux命令,该示例可能是运行docker引擎的示例。
或者,您可以通过键入wsl并转到该路径cd /tmp/history来连接到该linux
一旦进入wsl示例,你可以写explorer.exe .在那个位置打开资源管理器(在windows上)
注意路径总是以\\wsl$开始,所以你可以在windows上转到那个路径,看到所有的wsl示例和它们的文件系统,尝试在资源管理器中搜索“npm-cache”,你可能会找到它。

通过Docker命令

docker volume ls将给予所有可用卷。你的没有命名,所以它可能是'UUID'之一。你可以检查每个卷来找到它的位置(可能仍然在wsl示例中)docker volume inspact {the-uuid-of-the-volume}如果你检查它,你会看到每个卷都有一个Mountpoint字段,它指向卷的位置(在wsl示例中)
未命名的卷是用不同的用户权限创建的,因此您可能需要sudo通过wsl终端与它们交互。
如果是通过\\wsl$上的windows文件资源管理器,你可能不需要额外的权限。

2ic8powd

2ic8powd3#

在Windows中挂载绝对路径时,如

Volumes:
  - /MysteryFolder:/DataInContainer

写入容器内 DataInContainer 的文件将在容器重新启动后继续存在。但它可能无法在Docker引擎重启后存活下来。
但要回答你的问题。我发现您可以使用以下UNC路径从Windows访问 MysteryFolder 中的文件:

\\wsl.localhost\docker-desktop\tmp\docker-desktop-root\containers\services\docker\rootfs\MysteryFolder

相关问题