我希望在我的停靠器撰写文件中使用一个命名卷,该文件绑定到主机中的用户定义路径。这似乎是可能的,因为我已经在网上看到了多个例子,其中之一就是How can I mount an absolute host path as a named volume in docker-compose?。
所以我也想做同样的事。请记住,这只是一个示例,我有一个用例,其中我想为DRYness使用命名卷。
注意:我在WSL2中使用
version: '3'
services:
example:
image: caddy
restart: unless-stopped
volumes:
- caddy_data:/data
- ./Caddyfile:/etc/caddy/Caddyfile
volumes:
caddy_data:
name: caddy_data
driver_opts:
o: bind
device: D:\Some\path_in\my\host
type: none
# volumes:
# caddy_data:
# external: true
# name: caddyvol这不起作用,每次执行docker compose up -d时,我都会得到错误:
[+] Running 1/2
- Volume "caddy_data" Created 0.0s
- Container project-example-1 Creating 0.9s
Error response from daemon: failed to mount local volume: mount D:\Some\path_in\my\host:/var/lib/docker/volumes/caddy_data/_data, flags: 0x1000: no such file or director但是如果我首先使用
docker volume create --opt o=bind --opt device=D:\Some\path_in\my\host --opt type=none caddyvol然后在我的docker撰写文件中使用上面的内容(请参阅上面文件的注释部分),它工作得很完美。
我甚至试图找出所创建的卷之间的区别,但却没有发现。
docker volume inspect caddy_data
[
{
"CreatedAt": "2021-12-12T18:19:20Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "ngrok-compose",
"com.docker.compose.version": "2.2.1",
"com.docker.compose.volume": "caddy_data"
},
"Mountpoint": "/var/lib/docker/volumes/caddy_data/_data",
"Name": "caddy_data",
"Options": {
"device": "D:\\Some\\path_in\\my\\host",
"o": "bind",
"type": "none"
},
"Scope": "local"
}
]docker volume inspect caddyvol
[
{
"CreatedAt": "2021-12-12T18:13:17Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/caddyvol/_data",
"Name": "caddyvol",
"Options": {
"device": "D:\\Some\\path_in\\my\\host",
"o": "bind",
"type": "none"
},
"Scope": "local"
}
]有什么想法吗?这里怎么了?
发布于 2021-12-16 15:34:08
最后,由于有人指出了我一半的错误,我终于想出了答案。在编写文件中定义卷时,设备应该是linux路径格式的,而不需要在驱动器名之后使用-- :。此外,版本号应该完全定义。所以,在这个例子中,应该是
version: '3.8'
services:
example:
image: caddy
restart: unless-stopped
volumes:
- caddy_data:/data
- ./Caddyfile:/etc/caddy/Caddyfile
volumes:
caddy_data:
name: caddy_data
driver_opts:
o: bind
device: d/Some/path_in/my/host
type: none但这还是行不通的。而且它似乎并不只适用于。因此,我进入了\\wsl.localhost\docker-desktop-data\version-pack-data\community\docker\volumes,检查了手动创建的卷与从复合文件生成的卷之间的差异。
唯一的区别是每个opts.json文件中的opts.json键。手动创建的文件已将/run/desktop/mnt/host/附加到所提供的路径。所以,我更新了我的撰写文件
version: '3.8'
services:
example:
image: caddy
restart: unless-stopped
volumes:
- caddy_data:/data
- ./Caddyfile:/etc/caddy/Caddyfile
volumes:
caddy_data:
name: caddy_data
driver_opts:
o: bind
device: /run/desktop/mnt/host/d/Some/path_in/my/host
type: none这起作用了!
https://stackoverflow.com/questions/70326574
复制相似问题