我正在尝试从WSL内部使用docker客户端,并连接到Windows上的docker引擎。我已经在Windows的2375端口上公开了docker引擎,并且在WSL中设置了DOCKER_HOST环境变量后,我可以通过运行docker ps来验证此工作。
当我尝试从WSL将目录挂载到Docker容器中时,问题就来了。例如:
mkdir ~/dockertest && touch ~/dockertest/example.txt
)上的主文件夹中创建目录和文件ls ~/dockertest
显示我的文件已创建docker run -it --rm -v ~/dockertest:/data alpine ls /data
)有什么想法我可能会错过吗?
答案 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