WSL上的Docker不会绑定mount $ HOME

时间:2018-07-30 07:36:30

标签: docker windows-subsystem-for-linux

在WSL(适用于Linux的Windows子系统,Ubuntu 16.04)上使用Docker的情况最奇怪。我正在尝试将挂载/home/username(为方便起见,仅绑定$HOME)作为容器中的卷,而不是在容器中找到我的主目录的内容,而是完全获得了其他一些卷

奇怪的是,每当我尝试绑定装载$HOME/home/username时,这个“其他卷”都会从一个容器持续存在。如果我touch一个新文件,它会出现在我将$HOME装入的所有其他容器中。所有其他绑定到任何其他目录的绑定安装都可以正常工作。

例如这些都共享同一个神秘文件夹:

docker run -it --rm -v /home/username:/test alpine sh
docker run -it --rm -v $HOME:/test alpine sh
docker run -it --rm -v $HOME:/test -v $HOME:/test2 alpine sh

当我执行docker volume ls时,没有名为/home/username的卷,因此可以排除意外地有一个由Docker托管的同名卷的情况。

我要装入的这个神秘卷是什么?为什么docker无法正确装入我的$HOME目录?

2 个答案:

答案 0 :(得分:0)

我按照https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly#ensure-volume-mounts-work中的说明进行了设置。

然后,我必须明确地export HOME=/c/Users/rfay,以便Windows上的Docker守护程序可以访问它。但这行得通。基本的魔术在于,您在WSL中的路径必须是Docker守护进程可以在本机Windows中转换的东西。

答案 1 :(得分:0)

无需按照@rfay的建议更改堆垛点。相反,如果您使用一个小的命令foo,则可以使用pwd和sed为您修复该值。

docker run -it -v $(pwd | sed 's/^\/mnt//'):/var/myfolder -w "/var/myfolder" centos:7

pwd将返回当前的工作文件夹,通常格式为'/ mnt / c / code / myfolder'。将其输液到sed并不加任何替换'/ mnt'将使您留下诸如'/ c / code / myfolder'之类的路径,这是Windows docker所需的路径。您需要将整个内容包装在$()中,以使其在适当位置执行。

我发现这真的很好。