如何解决Windows WSL2上的Docker卷
我刚刚在Windows的Docker上尝试了WSL 2,但是挂载卷出现了问题:
version: "3.7"
services:
node:
build: .
container_name: node
hostname: node
volumes:
- ./app:/app
stdin_open: true
容器的构建和启动良好,我可以通过docker exec很好地访问它,但是容器内的/app
文件夹未绑定到我的笔记本电脑app
文件夹。但是,正确的路径实际上已正确安装在正在运行的容器上:
(在这里我对主机执行pwd操作,以确保它与容器上安装的内容完全匹配)
➜ app pwd
/mnt/c/Users/willi/devspace/these/app
这是搬运工的屏幕,告诉我在容器中安装了什么路径,什么都匹配。
我在主机上的app文件夹中创建的文件在容器的app文件夹中不可见,反之亦然。这很奇怪,我不知道如何调试它。
补充信息:
- Windows 10专业版10.0.19041
- Docker for Windows版本:2.3.0.4 WSL中的
-
docker version
输出:12年3月19日 -
docker-compose version
:1.26.2
谢谢
解决方法
如@Pablo所述,最佳实践似乎正在使用WSL文件系统来映射卷。
看看Docker Documentation concerning WSL2:
最佳做法
- 要在绑定安装文件时充分利用文件系统性能:
- 将源代码和其他数据绑定安装到Linux容器(即,使用
docker run -v <host-path>:<container-path>
)中而不是Windows文件系统中。 - 如果原始文件存储在Linux文件系统中,则Linux容器仅接收文件更改事件(“初始化事件”)。
- 当文件从Linux文件系统绑定挂载而不是从Windows主机远程挂载时,性能会更高。因此,请避免使用
docker run -v /mnt/c/users:/users
(从Windows挂载/mnt/c
的地方)。 - 相反,在Linux Shell中使用类似
docker run -v ~/my-project:/sources <my-image>
的命令,其中~
被Linux Shell扩展到$HOME
。
- 将源代码和其他数据绑定安装到Linux容器(即,使用
- 如果您对docker-desktop-data VHDX的大小有疑问,或者需要更改它,请查看Windows内置的WSL工具。
- 如果您对CPU或内存使用量有疑问,可以配置分配给WSL 2实用程序VM的内存,CPU,交换大小的限制。
- 为避免与在Docker Desktop上使用WSL 2发生任何潜在冲突,必须在安装Docker Desktop之前卸载直接通过Linux发行版安装的任何早期版本的Docker Engine和CLI。
现在一切正常,看来我的问题是我的WSL发行版仍在版本1中。您可以使用以下命令进行验证:wsl -l -v
NAME STATE VERSION
* docker-desktop-data Stopped 2
docker-desktop Stopped 2
Ubuntu-20.04 Running 2 <- This was at 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。