WSL中的Docker Bind Mounts不显示文件

时间:2018-08-01 07:27:05

标签: docker windows-subsystem-for-linux docker-volume

我正在尝试从WSL内部使用docker客户端,并连接到Windows上的docker引擎。我已经在Windows的2375端口上公开了docker引擎,并且在WSL中设置了DOCKER_HOST环境变量后,我可以通过运行docker ps来验证此工作。

当我尝试从WSL将目录挂载到Docker容器中时,问题就来了。例如:

  • 我在WSL(mkdir ~/dockertest && touch ~/dockertest/example.txt)上的主文件夹中创建目录和文件
  • ls ~/dockertest显示我的文件已创建
  • 我现在启动一个Docker容器,安装我的docker测试文件夹(docker run -it --rm -v ~/dockertest:/data alpine ls /data
  • 我希望能在docker容器中看到“ example.txt”,但这似乎没有发生。

有什么想法我可能会错过吗?

4 个答案:

答案 0 :(得分:1)

https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly#ensure-volume-mounts-work的WSL中​​有关于Docker设置的重要说明-解决了我的大部分问题。对我来说,最大的诀窍是绑定目录。您必须在WSL中使用Docker守护程序将能够转换的路径,例如/ c / Users / rfay / myproject。

答案 1 :(得分:1)

在此问题上绊脚石的任何人都遵循以下规则:Docker Desktop WSL2 Backend,并确保您在PowerShell中运行WSL的版本2:

> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  Ubuntu                 Running         2
  docker-desktop-data    Running         2

如果您的Ubuntu VERSION未显示2,则需要根据上述指南进行更新。

之后,您将能够直接将Linux目录挂载到Docker容器,例如:

docker run -v ~/my-project:/sources <my-image>

答案 2 :(得分:0)

我认为您不需要按照链接的建议更改堆垛点。相反,如果将pwd和sed结合使用,您将获得所需的效果。

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

pwd以'/ mnt / c / code / folder'格式返回工作文件夹。用管道将其输送到sed并用空字符串替换'/ mnt'将为您提供诸如'/ c / code / folder'之类的路径,这对于Windows的docker是正确的。

答案 3 :(得分:0)

特定于WSL 1 遇到同样的问题。要记住的一件事是,docker run命令然后不会在命令外壳上执行容器。它将运行参数发送到无法正确解释WSL路径的docker守护程序。因此,您需要在Windows格式的路径中使用引号,并使用反斜杠转义

您的Windows路径为

\\wsl$\Ubuntu\home\username\dockertest

转义后的Docker命令可能类似于

docker run -it --rm -v "\\\\wsl\$\\Ubuntu\\home\\username\\dockertest":/data alpine ls /data