【发布时间】:2020-02-16 18:13:38
【问题描述】:
我有以下情况:我想创建一个绑定挂载,它根据 docker 映像的内容进行初始化。
在 MacOS 上,我可以执行以下操作来完成此操作:
- 创建卷:
docker volume create --opt type=none --opt device=%(pwd)/data_dir --opt o=bind --name data_volume - 使用卷运行容器:
docker run -v data_volume:/home
这将创建一个与当前工作目录中的目录数据绑定挂载的卷,该卷称为 data_volume。运行卷只需要指定卷的名称。
但是,在 Windows 10 上,我可以执行以下操作:docker run -v %cd%/data_dir:/home。这等效于 MacOS 描述,但不使用卷(因此它使用空的 data_dir 目录进行初始化)。然而,这表明 Docker 理解当前的绑定挂载。
当我使用为 MacOS 描述的步骤创建卷时,我收到以下错误:
来自守护进程的错误响应:无法挂载本地卷:mount c:/some-path/data_dir:/var/lib/docker/volumes/data_volume/_data,标志:0x1000:没有这样的文件或目录。
检查不使用 docker 卷使用的容器会产生以下设置:
...
"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/ 前缀,但在运行容器和直接挂载绑定时不需要(没有 docker 卷)。
【问题讨论】:
标签: docker docker-volume