基于 WLS2 的 docker desktop 无法将系统中的挂载目录,挂载到容器里

2024-07-18 19:30:07 +08:00
 l0ad1ng
cd ~
mkdir test
mount --bind /etc test
docker run -it --rm -v test:/data debian ls /data

这时候容器里的/data 目录是空的,没有/etc 目录中的文件

只要是 mount 上去的目录,不管是本地还是远程的,docker 都挂不进去。挂进去的其实是原始的~/test目录。

有人知道是为什么吗?

1982 次点击
所在节点    Windows
10 条回复
yinmin
2024-07-18 19:33:34 +08:00
-v 后面的 test 要用全路径,只用 test 不是路径是 volume
iv8d
2024-07-18 19:34:54 +08:00
都用全路径试试,另外你是不是挂载的卷
yinmin
2024-07-18 19:35:28 +08:00
docker volume list 能看到一个名为 test 的 volume ,你挂接的是 volume:test
mmdsun
2024-07-18 20:58:57 +08:00
你这个 test 是数据卷吧?,WSL2 直接用 Linux 版本 docker 还好用些可以不用 docker desktop
urzz
2024-07-18 21:30:51 +08:00
这种跨 wsl 系统的文件访问速度咋样
l0ad1ng
2024-07-19 00:29:18 +08:00
绝了,还会自动创建 volume
l0ad1ng
2024-07-19 00:41:38 +08:00
@mmdsun 我也试过,WSL2 的 mirrored 网络和 Linux 版的 docker 配合不太好。
在 windows 上无法访问 docker 映射出来的端口,只能在 wsl 里面访问。docker 配置加上 iptables: false windows 可以访问了,但容器之间就无法通信了。
docker desktop 就都正常。
Mageblade
2024-07-19 10:18:27 +08:00
可以的,我就在用基于 wsl2 的 docker desktop ,给你发一个我的 docker-compose 配置


version: '3'

name: gogs

services:
gogs:
container_name: gogs
image: gogs/gogs
volumes:
- 'd:/DockerVolumes/gogs:/data'
ports:
- '10880:3000'
- '10022:22'
restart: always
huangcjmail
2024-07-19 16:35:08 +08:00
建议看看命名卷和绑定挂载的区别。你应该是想要实现绑定挂载,需要写绝对路径。这种写法 docker 看起来是绑定命名卷,然后自动创建了 test 命名卷。
l0ad1ng
2024-07-20 11:52:24 +08:00
@urzz 读写 vhdx 的性能还可以接受

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1058384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX