如何在Windows上使用Docker Toolbox的--volume选项?

时间:2015-10-14 13:11:00

标签: docker boot2docker docker-toolbox

如何在Windows文件和docker容器之间共享文件夹,方法是使用Docker Toolbox挂载简单--volume命令的卷?

我正在使用" Docker Quickstart Terminal"当我尝试这个时:

winpty docker run -it --rm --volume /C/Users/myuser:/myuser ubuntu

我有这个错误:

Invalid value "C:\\Users\\myuser\\:\\myuser" for flag --volume: bad mount mode specified : \myuser
See 'docker run --help'.

关注this,我也尝试了

winpty docker run -it --rm --volume "//C/Users/myuser:/myuser" ubuntu

得到了

Invalid value "\\\\C:\\Users\\myuser\\:\\myuser" for flag --volume: \myuser is not an absolute path
See 'docker run --help'.

9 个答案:

答案 0 :(得分:44)

这是对所选答案的改进,因为答案仅限于c:\ Users文件夹。如果要使用c:\​​ Users之外的目录创建卷,则这是一个扩展名。

在Windows 7中,我使用了docker工具箱。它使用Virtual Box。

  1. 打开虚拟框
  2. 选择机器(在我的情况下是默认值)。
  3. 右键单击并选择设置选项
  4. 转到共享文件夹
  5. 包含新的计算机文件夹。
  6. 例如,就我而言,我已经包括:

    **Name**: c:\dev
    **Path**: c/dev
    
    1. 点击并关闭
    2. 打开“Docker Quickstart Terminal”并重启docker机器。
    3. 使用此命令:

      $ docker-machine restart
      

      要验证它是否有效,请执行以下步骤:

      1. SSH到docker机器。
      2. 使用此命令:

        $ docker-machine ssh
        
        1. 转到已共享/已安装的文件夹。
        2. 在我的情况下,我使用此命令

          $ cd /c/dev
          
          1. 检查文件夹的用户所有者。您可以使用“ls -all”并验证所有者将是“docker”
          2. 你会看到这样的事情:

            docker@default:/c/dev$ ls -all
            total 92
            drwxrwxrwx    1 docker   staff         4096 Feb 23 14:16 ./
            drwxr-xr-x    4 root     root            80 Feb 24 09:01 ../
            drwxrwxrwx    1 docker   staff         4096 Jan 16 09:28 my_folder/
            

            在这种情况下,您将能够为该文件夹创建一个卷。

            您可以使用以下命令:

            docker create -v /c/dev/:/app/dev --name dev image
            docker run -d -it --volumes-from dev image
            

            docker run -d -it -v /c/dev/:/app/dev image
            

            这两个命令对我有用。我希望这会有用。

答案 1 :(得分:29)

这实际上是一个issue of the project,有2个工作解决方法:

  1. 创建数据卷:

    docker create -v //c/Users/myuser:/myuser --name data hello-world
    winpty docker run -it --rm --volumes-from data ubuntu
    
  2. 直接在docker主机中进行SSH:

    docker-machine ssh default
    

    从那里做经典:

    docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
    

答案 2 :(得分:6)

截至2016年8月,Docker for windows现在直接使用hyper-v而不是virtualbox,所以我认为它有点不同。首先在设置中共享驱动器,然后使用C:驱动器号格式,但使用正斜杠。例如,我创建了一个H:\t\REDIS目录,并且能够使用以下命令在容器中的/data上看到它:

docker run -it --rm -v h:/t/REDIS:/data redis sh

相同的格式,使用驱动器号和冒号,然后路径分隔符的正斜杠同时从Windows命令提示符和git bash工作。

我发现这个问题谷歌搜索找到答案,但我找不到任何有用的东西。事情似乎没有错误被抛出,但我无法看到主机上的数据(反之亦然)。最后,我仔细检查了设置并尝试了它们显示的格式:

enter image description here

首先,您必须在此处的设置中将整个驱动器共享到docker vm,我认为这样可以让#docker-machine' vm在对该驱动器的hyper-v访问中运行。然后你必须使用那里显示的格式,这似乎只存在于这一个图像中,而且没有我在网上找到的文档或问题:

docker run --rm -v c:/Users:/data alpine ls /data

答案 3 :(得分:4)

试试这个:

  1. 打开 Docker快速入门终端。如果它已经打开,请运行$ cd ~以确保您位于Windows用户目录中。
  2. $ docker run -it -v /$(pwd)/ubuntu:/windows ubuntu
  3. 如果错误是由于拼写错误,它将起作用。您将在用户目录中获得名为ubuntu的空文件夹。您将在ubuntu容器中看到名为windows的文件夹。

答案 4 :(得分:4)

如果您正在寻找解决所有Windows问题的解决方案,并使其在Windows操作系统上以与Linux相同的方式运行,请参阅下文。我测试了它,它适用于所有情况。我也展示了我是如何得到它的(步骤和思考过程)。 I've also wrote an article about using Docker and dealing with with docker issues here.

解决方案1:使用VirtualBox(如果您认为这不是一个好主意,请参阅下面的解决方案2)

  • 打开VirtualBox(已将它与docker工具一起安装)
  • 创建虚拟机
  • (这是可选的,您可以跳过它并从VM转发端口)创建第二个以太网卡 - 桥接,这样它将从您的网络接收IP地址(它将具有像docker机器的IP)
  • 安装超过1年的Ubuntu LTS
  • 安装docker
  • 将共享目录添加到虚拟机并自动挂载项目目录(这样您就可以从Ubuntu访问项目目录)但仍可以在Windows中运行
  • 完成

加成:

  • 一切都像在Linux上一样工作
  • 随时暂停/取消暂停dockerized环境

解决方案2:使用VirtualBox(这与解决方案1非常相似,但它也显示了思考过程,在解决类似问题时可能很有用)

  • 读取有人将文件夹移动到/ C / Users / Public,并且https://forums.docker.com/t/sharing-a-volume-on-windows-with-docker-toolbox/4953/2
  • 有效
  • 尝试一下,意识到它在你的情况下没有多大意义。
  • 在此处阅读整个页面https://github.com/docker/toolbox/issues/607并尝试使用第
  • 页中列出的所有解决方案
  • 查找此页面(您正在阅读的页面)并尝试其他评论中的所有解决方案
  • 查找设置COMPOSE_CONVERT_WINDOWS_PATHS = 1环境变量可能解决问题的信息。
  • 停止寻找解决方案几个月
  • 返回并再次查看相同的链接
  • 深深地哭泣
  • 感受启蒙时刻
  • 打开VirtualBox(已将它与docker工具一起安装)
  • 使用第二个以太网卡创建虚拟机 - 桥接,这样它将从您的网络接收IP地址(它将具有类似泊坞机的IP)
  • 安装最近(不超过几个月)的Ubuntu LTS
  • 请注意,自动挂载并没有真正起作用,并且集成被破坏(如剪贴板共享等)。
  • 删除虚拟机
  • 出去喝一杯
  • 租用昂贵的汽车,在高速公路上高速行驶
  • 摧毁汽车并死亡
  • 在电脑前重生
  • 安装超过1年的Ubuntu LTS
  • 尝试运行docker
  • 注意它没有安装
  • 通过apt-get install docker安装docker
  • 安装建议的docker.io
  • 尝试运行docker-compose
  • 注意它没有安装
  • apt get install docker-compose
  • 尝试使用docker-compose
  • 运行项目
  • 请注意,它是旧版本
  • 检查您的功率等级(应该超过9000)
  • 搜索如何安装最新版本的docker并找到官方指南https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • 卸载当前的docker-compose和docker.io
  • 使用官方指南https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • 安装docker
  • 将共享目录添加到虚拟机并自动挂载项目目录(这样您就可以从Ubuntu访问项目目录,因此可以运行任何docker命令)
  • 完成

答案 5 :(得分:3)

对于那些喜欢命令行方法的 Virtual Box 的人

1)确保泊坞机未运行

Docker快速入门终端:

docker-machine stop

2)创建共享Windows< - >搬运工机

Windows命令提示符:
(修改以下内容以适合您的方案。我从通过Dropbox同步的目录中提供我的Apache httpd容器。)

set VBOX=D:\Program Files\Oracle\VirtualBox\VBoxManage.exe
set VM_NAME=default
set NAME=c/htdocs
set HOSTPATH=%DROPBOX%\htdocs
"%VBOX%" sharedfolder add "%VM_NAME%" --name "%NAME%" --hostpath "%HOSTPATH%" --automount

3)启动泊坞机并将卷装入新容器

Docker Quickstart终端:
(同样,我正在启动一个Apache httpd容器,因此该端口暴露。)

docker-machine start
docker run -d --name my-apache-container-0 -p 80:80 -v /c/htdocs:/usr/local/apache2/htdocs my-apache-image:1.0

答案 6 :(得分:1)

仅在Windows 7上使用双斜杠对我有用:

docker run --rm -v //c/Users:/data alpine ls /data/

从这里拍摄:https://github.com/moby/moby/issues/12590

答案 7 :(得分:1)

共享文件夹virtualBox工具箱以及Windows 7和Node.js图像容器

使用... Docker快速入门终端[QST] Windows资源管理器[WE]

让我们开始...

  1. [QST]打开Docker Quickstart Terminal

  2. [QST]停止虚拟机

$ docker-machine stop

  1. [WE]打开Windows资源管理器

  2. [WE]转到virtualBox安装目录

  3. [WE]打开一个cmd并执行...

C:\ Program Files \ Oracle \ VirtualBox> VBoxManage共享文件夹添加“默认” --name “ / d / SVN_FOLDERS / X2R2_WP6 / nodejs” --hostpath“ \?\ d:\ SVN_FOLDERS \ X2R2_WP6 \ nodejs” --automount

  1. 在oracle虚拟机中检查是否出现了新的共享文件夹

  2. [QST]启动虚拟机

$ docker-machine start

  1. [QST]运行容器nodejs

docker stop nodejs

docker rm nodejs

docker run -d -it --rm --name nodejs -v / d / SVN_FOLDERS / X2R2_WP6 / nodejs:/ usr / src / app -w / usr / src / app node2

  1. [QST]向容器打开bash

docker exec -i -t nodejs / bin / bash

  1. [QST]执行目录,您将看到共享文件

答案 8 :(得分:0)

我解决了!

添加卷:

docker run -d -v my-named-volume:C:\ MyNamedVolume testimage:latest

挂载主机目录:

docker run -d -v C:\ Temp \ 123:C:\ My \ Shared \ Dir testimage:latest