gpt4 book ai didi

docker - 为什么在 Windows 中使用绑定(bind)挂载卷时需要/host_mt/

转载 作者:行者123 更新时间:2023-12-02 18:26:49 24 4
gpt4 key购买 nike

我有以下情况:我想创建一个绑定(bind)挂载,它根据 docker 镜像的内容进行初始化。

在 MacOS 上,我可以执行以下操作来完成此操作:

  1. 创建卷:docker volume create --opt type=none --opt device=%(pwd)/data_dir --opt o=bind --name data_volume
  2. 使用卷运行容器:docker run -v data_volume:/home

这将创建一个卷,该卷绑定(bind)挂载到当前工作目录中的目录数据,该卷称为 data_volume。运行卷只需要指定卷的名称。

但是,在 Windows 10 上,我可以执行以下操作:docker run -v %cd%/data_dir:/home。这等同于 MacOS 描述但不使用卷(因此它使用空 data_dir 目录进行初始化)。然而,这表明 Docker 理解当前的绑定(bind)挂载。

当我使用针对 MacOS 描述的步骤创建卷时,出现以下错误:

Error response from daemon: failed to mount local volume: mount c:/some-path/data_dir:/var/lib/docker/volumes/data_volume/_data, flags: 0x1000: no such file or directory.

检查不使用 docker volume 使用的容器会产生以下设置:

...
"Mounts": [
{
"Type": "bind",
"Source": "/host_mnt/c/some-path/data_dir",
"Destination": "/home,
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
...

因此,如果我将音量更改为:docker volume create --driver local -o o=bind -o type=none -o device=/host_mnt/c/some-path/data_dir data_volume

它有效。为什么在 Windows 上创建卷时需要 /host_mnt/ 前缀,但在运行容器和直接挂载绑定(bind)(没有 docker 卷)时不需要前缀。

最佳答案

由于其内核命名空间,Docker 仅适用于 Linux。因此,当您在 Windows 计算机上运行 docker 容器时,它实际上运行了一个运行该 docker 容器的 linux 虚拟机(因此需要 Hyper-V 来运行 docker)。 linux 和 mac 使用的 UNIX 文件路径与 windows 使用的不同。在 linux 和 mac 上,文件路径从 / 开始,而在 windows 上,文件路径从驱动器开始(如 C:/)。两个不同的系统互不兼容,所以docker将C盘放在/host_mnt/c,以使系统互相兼容。

关于docker - 为什么在 Windows 中使用绑定(bind)挂载卷时需要/host_mt/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60251613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com