WSL 上的 Docker 客户端创建卷路径问题

WSL 上的 Docker 客户端创建卷路径问题

Windows 10 版本 15063.11,运行适用于 Linux 的 Windows 子系统 (WSL) Xenial 16.04.2 LTS。

WSL 中有一个运行的 docker 客户端,连接到 Windows Hyper-V 守护程序。很有趣。

我无法摆脱的一个问题是 WSL 和 Hyper-V 守护进程之间的卷路径映射 -来自撰写文件。Compose 文件应该是跨平台的——它们都是相对的,如果我开始仅仅compose.yml为了适应我的 WSL 怪物而进行更改,服务将无法在其他任何地方正常启动,这并不完全实用。

我可以做类似的事情export MSYS_NO_PATHCONV=1来让 WSL 在将路径发送到守护进程之前停止破坏它们吗?

这个问题需要在哪里解决?在守护进程中?在 Compose 中?在 WSL 中?我可以在哪里做出贡献?

组合文件之外的卷映射工作得很好,因为您可以在将它们传递给客户端/守护进程时绝对地指定它们,并以正确的格式指定它们。

例如,docker run -v c:/my/stuff/is/here:/vars/now/here magicImage在 WSL 内部运行效果非常好。只是 compose 从 WSL 获取的绝对文件名实际上不是文件名,例如,/mnt/c/my/stuff/isnt/here因为在守护进程的 Hyper-V 世界中,/mnt/c/这是无稽之谈。

跟进:伸出了docker/compose.docker-compose调用os.path.abspath来解析资源的绝对路径,因此问题似乎更有可能出现在使用微软/BashOnWindows

答案1

我认为答案已经在Docker-compose 和卷的错误绝对路径 · 问题 #1854 · Microsoft/BashOnWindowsGitHub 上的线程,但我在这里发布以供其他人查看:

有两种可能的解决方法:符号链接和绑定挂载。它们都有效,但绑定可能更好,因为某些服务不使用符号链接。

转向提供命令在评论中GitHub线。

$ sudo mkdir /c
$ sudo mount --bind /mnt/c /c
$ cd /c/path/to/project
$ docker-compose ...

绑定的唯一缺点是,由于我们初始化容器的方式,它只能持续与实例(在本例中为容器)一样长的时间。因此,绑定需要成为容器启动例程的一部分。

相关内容