Docker WSL码头工人赢得';不要把山绑在家里

Docker WSL码头工人赢得';不要把山绑在家里,docker,windows-subsystem-for-linux,Docker,Windows Subsystem For Linux,在WSL(Linux的Windows子系统,Ubuntu 16.04)上使用Docker是我遇到的最奇怪的情况。我试图将mount/home/username(或者为了方便起见,$home)绑定为容器中的一个卷,而不是在容器中查找我的主目录的内容,我完全得到了另一个卷 奇怪的是,每当我尝试绑定mount$HOME或/HOME/username时,这个“其他卷”就会从一个容器持续存在到另一个容器。如果我触摸一个新文件,它会出现在我装入的所有其他容器中。所有其他绑定装载到任何其他目录都可以正常工作

在WSL(Linux的Windows子系统,Ubuntu 16.04)上使用Docker是我遇到的最奇怪的情况。我试图将mount
/home/username
(或者为了方便起见,
$home
)绑定为容器中的一个卷,而不是在容器中查找我的主目录的内容,我完全得到了另一个卷

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

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

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卷ls
时,没有名为
/home/username
的卷,因此排除了意外使用具有相同名称的docker托管卷的情况


我正在安装的神秘卷是什么?为什么docker没有正确安装我的
$HOME
目录?

我使用中的说明设置了所有内容


然后我必须显式地
导出HOME=/c/Users/rfay
,以便Windows上的Docker守护进程可以访问它。但这起了作用。基本的神奇之处在于,您在WSL中的路径必须是Docker守护进程可以在本机Windows中转换的内容。

无需按照@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”替换为nothing将为您留下一个路径,如“/c/code/myfolder”,这是docker for windows所需的路径。您需要用$()将整个内容包装起来,以便在适当的位置执行它


我发现这非常有效。

您要连接的Docker守护进程在哪里?您使用的是哪种Docker风格-Docker For Windows、Docker Toolbox、其他?也请在此处发布容器的
Docker inspect
结果,尤其是卷部分:
Docker inspect-f'{.Mounts}“
我正在使用Docker for Windows,通过将
$Docker\u HOST
设置为
tcp://0.0.0.0:2375
。到目前为止没有问题。
docker-inspect的结果
[{bind/home/martaver/test-true-rprivate}]
docker-inspect的结果告诉我们这个“mistery”卷位于您的docker主机(Hyper-V VM)的
/home/martaver
文件夹中。为什么它会在那里创建一个卷,而不是从WSL装载/home/martaver?它正确装载所有其他文件夹。此外,此卷在
docker卷ls
上不可见。。。?