我有以下情况:我想创建一个基于Docker镜像内容初始化的绑定挂载点。
在MacOS上,我可以执行以下操作来完成这个任务:
1. 创建卷:
然而,在Windows 10上,我可以执行以下操作:
当我使用类似MacOS描述的步骤创建卷时,我会遇到以下错误:
因此,如果我更改卷的命令为:
在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
这将创建一个挂载到当前工作目录中"data"目录的卷,卷名为"data_volume"。运行该卷只需要指定卷名即可。然而,在Windows 10上,我可以执行以下操作:
docker run -v %cd%/data_dir:/home
。这相当于MacOS描述,但不使用卷(因此它会初始化为空的"data_dir"目录)。不过这表明Docker理解当前的绑定挂载点。当我使用类似MacOS描述的步骤创建卷时,我会遇到以下错误:
如果不使用Docker卷检查容器,则会得到以下设置: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.
...
"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 volume直接挂载绑定时运行容器却不需要呢?