如何在Linux的Windows子系统上的docker中使用-v卷参数

时间:2018-11-25 23:51:18

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

我的Windows 10版本是1803

我在链接上安装了docker伙伴

https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly

我尝试使用docker的-v,例如:

docker run -it -v ~/.aws:root/.aws/ ubuntu

我也尝试使用:

docker run -it -v $(realpath ~/.aws):/root/.aws ubuntu

但是我发现我想映射到docker系统的卷不存在。

当我这样做:

ls /root/.aws

总有空,如何在Linux的Windows子系统上映射数据卷?

3 个答案:

答案 0 :(得分:0)

Docker for Windows在Windows本身上运行,但不了解WSL。

在WSL中:

  • 发行版可以通过/mnt/<drive-letter>下的自动安装的驱动器查看Windows“驱动器”的内容
  • Windows当前无法进入已安装的Linux发行版的文件系统。我们正在努力在将来的版本中对此进行补救;)

虽然Docker Engine本身无法在WSL中运行,但是您可以安装Docker for Windows,并使用docker命令行工具在WSL中运行它,并通过-h参数指定主机名,或导出到您的DOCKER_HOST中的.bashrc

您可能会发现其中一些有用的教程:

答案 1 :(得分:0)

这个问题有点老了,但是我有同样的问题。 下面是我的配置:

  • 主机操作系统:Windows 10.0.17134 N / A内部版本17134
  • WSL:
    • 4.4.0-17134-Microsoft#706-Microsoft
    • Ubuntu 18.04.1 LTS
  • Docker:
    • WSL上的Docker-ce:Docker 18.09.6版,内部版本481bc77
    • 适用于Windows CE的Docker:版本2.0.0.3(31259)构建8858db3

在使用docker作为开发环境的笔记本电脑上工作时,以下解决方案最有用。不应在生产/测试服务器中使用:

  1. 在WSL和Windows 10之间共享一个文件夹。
  2. 将需要与Docker容器共享的文件复制到共享文件夹。 这样一来,WSL和Windows 10都可以看到/访问文件。
  3. 使用Windows样式卷名称启动绑定一个卷的docker容器

以下是命令:

  1. 在Windows主机上,在Windows计算机上创建一个文件夹

    md %USERPROFILE%\dockerVolume
    
  2. 在WSL上,将该文件夹与WSL用户主文件夹上的链接

    ln -s `wslpath $(cmd.exe /C "echo %USERPROFILE%")|sed -e 's/\r//g'`/dockerVolume $HOME/dockerVolume
    
  3. 在WSL上,将需要从Docker容器访问的所有文件复制到$ HOME / dockerVolume中
  4. 然后将您的docker容器运行为:

    docker run -it -v `cmd.exe /C "echo %USERPROFILE%"|sed 's/\r/\\\dockerVolume/g'`:/dockerVolume -w /dockerVolume --entrypoint /bin/bash <DOCKER IMAGE NAME>
    

答案 2 :(得分:0)

上面由Serge回答的方法是可行的,但是我已经取消了cmd.exe部分,只是用单引号将Windows样式路径括起来。

我在WSL内运行的Desktop for Docker遇到同样的问题,无法读取我的〜/ .aws文件夹。我的.aws文件夹是C:\ Users \ .aws文件夹的软链接。

这对我有用:

docker run -v 'C:\Users\username\.aws':/root/.aws linux_image