【问题标题】:Docker Bind Mounts in WSL do not show filesWSL 中的 Docker 绑定挂载不显示文件
【发布时间】:2018-08-01 07:27:04
【问题描述】:

我试图从 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”,但这似乎没有发生。

有什么我可能缺少的想法吗?

【问题讨论】:

  • 您的 Windows 驱动器是如何安装到 WSL 的?是否在/mnt(例如/mnt/c)或根目录/(例如/c)下?它应该挂载到根/。你可以在/etc/wsl.conf 中定义它,只要把root = / 放在那里。更多信息在这里:blogs.msdn.microsoft.com/commandline/2018/02/07/…
  • 找到解决方案了吗?我也在容器中遇到空的绑定挂载目录,只有挂载是我网络上的共享文件夹。

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


【解决方案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。

【讨论】:

    【解决方案2】:

    我认为您不需要按照链接的建议更改土墩点。相反,如果您将 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' 这对于 docker for windows 是正确的。

    【讨论】:

      【解决方案3】:

      在此问题上遇到问题的任何人都可以按照以下步骤操作: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>
      

      【讨论】:

        【解决方案4】:

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

        您的 Windows 路径是

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

        转义后的Docker命令大概会是这样的

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

        【讨论】:

          【解决方案5】:

          试试

           docker -v /:{path} exe
          

          希望能帮到你。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-07-16
            • 2019-01-09
            • 2023-03-20
            • 1970-01-01
            • 2020-05-24
            • 1970-01-01
            • 2017-05-09
            • 2020-10-29
            相关资源
            最近更新 更多