如何在 Windows 上将 --volume 选项与 Docker 工具箱一起使用?
How to use --volume option with Docker Toolbox on Windows?
如何使用 Docker 工具箱通过简单的 --volume
命令挂载卷,从而在我的 Windows 文件和 docker 容器之间共享文件夹?
我正在使用 "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'.
这实际上是一个 issue of the project 并且有 2 个解决方法:
正在创建数据卷:
docker create -v //c/Users/myuser:/myuser --name data hello-world
winpty docker run -it --rm --volumes-from data ubuntu
直接在 docker 主机中进行 SSH:
docker-machine ssh default
然后从那里做经典:
docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
试试这个:
- 打开Docker 快速启动终端。如果它已经打开,运行
$ cd ~
以确保您在 Windows 用户目录中。
$ docker run -it -v /$(pwd)/ubuntu:/windows ubuntu
如果错误是由于错字造成的,它会起作用。您将在您的用户目录中获得一个名为 ubuntu
的空文件夹。您将在 ubuntu 容器中看到名为 windows
的文件夹。
截至 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.
中都有效
我通过谷歌搜索找到了这个问题的答案,但找不到任何有用的答案。事情似乎没有任何错误被抛出,但我只是看不到主机上的数据(反之亦然)。最后我仔细检查了设置并尝试了他们显示的格式:
所以首先,你必须在此处的设置中将整个驱动器共享到 docker 虚拟机,我认为这让 hyper-v 中的 'docker-machine' 虚拟机 运行 可以访问它驾驶。然后你必须使用那里显示的格式,它似乎只存在于这一张图片中,没有我在网上找到的文档或问题:
docker run --rm -v c:/Users:/data alpine ls /data
这是对 selected 答案的改进,因为该答案仅限于 c:\Users 文件夹。如果您想使用 c:\Users 之外的目录创建卷,这是一个扩展。
在windows7中,我使用了docker工具箱。它使用了 Virtual Box。
- 打开虚拟盒子
- Select 机器(在我的例子中是默认值)。
- 右键单击并 select 设置选项
- 转到共享文件夹
- 包括一个新的计算机文件夹。
例如,在我的例子中,我包括:
**Name**: c:\dev
**Path**: c/dev
- 点击关闭
- 打开"Docker Quickstart Terminal"并重新启动docker机器。
使用这个命令:
$ docker-machine restart
要验证它是否有效,请执行以下步骤:
- SSH 到 docker 机器。
使用这个命令:
$ docker-machine ssh
- 转到您拥有的文件夹 shared/mounted。
在我的例子中,我使用这个命令
$ cd /c/dev
- 检查文件夹的用户所有者。您可以使用 "ls -all" 并验证所有者将是 "docker"
你会看到这样的东西:
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
这两个命令对我都有效。我希望这会有用。
对于使用 Virtual Box 且更喜欢命令行 方法的用户
1) 确保 docker-机器不是 运行
Docker 快速启动终端:
docker-machine stop
2) 创建共享Windows <-> docker-machine
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-机器并将卷装入新容器
Docker 快速启动终端:
(同样,我正在启动一个 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
我解决了!
添加卷:
docker 运行 -d -v my-named-volume:C:\MyNamedVolume testimage:latest
挂载主机目录:
docker 运行 -d -v C:\Temp3:C:\My\Shared\Dir testimage:latest
如果您正在寻找能够解决所有 Windows 问题并使其在 Windows OS 上以与在 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 )
- 安装 Ubuntu 超过 1 年的 LTS
- 安装docker
- 将共享目录添加到虚拟机并自动挂载您的项目目录(这样您就可以从 Ubuntu 访问项目目录)但仍然可以在 Windows
中工作
- 完成
奖金:
- 一切都与 Linux
上的一样
- Pause/Unpause docker随心所欲的环境
方案二:使用VirtualBox(这与方案一非常相似,但也展示了思考过程,在解决类似问题时可能会有用)
- 读到有人将文件夹移动到 /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 地址(它将具有类似于 docker 机器的 IP)
- 安装 Ubuntu 最近的 LTS(不超过几个月)
- 请注意,自动挂载并没有真正发挥作用,而且集成也被破坏了(比如剪贴板共享等)
- 删除虚拟机
- 出去喝一杯
- 租昂贵的车在高速公路上高速行驶
- 毁车而死
- 在你的电脑前重生
- 安装 Ubuntu 超过 1 年的 LTS
- 尝试运行docker
- 注意它没有安装
- 通过 apt-get install 安装 docker docker
- 安装建议docker.io
- 尝试运行 docker-撰写
- 注意它没有安装
- apt get install docker-compose
- 尝试使用 docker-compose
来 运行 您的项目
- 注意是旧版本
- 检查你的电量(应该超过9000)
- 搜索如何安装最新版本docker并找到官方指南https://docs.docker.com/install/linux/docker-ce/ubuntu/
- 卸载当前的 docker-compose 和 docker.io
- 使用官方指南安装 docker https://docs.docker.com/install/linux/docker-ce/ubuntu/
- 将共享目录添加到虚拟机并自动挂载您的项目目录(这样您就可以从 Ubuntu 访问项目目录,因此您可以 运行 任何 docker 命令)
- 完成
我在 Windows 7:
上简单地使用双前导斜杠对我有用
docker run --rm -v //c/Users:/data alpine ls /data/
共享文件夹 virtualBox 工具箱和 windows 7 和 nodejs 图像容器
使用...
Docker 快速启动终端 [QST]
Windows 探索者 [我们]
让我们开始...
[QST] 打开Docker 快速启动终端
[QST] 停止虚拟机
$docker-机器停止
[WE] 打开一个 windows 资源管理器
[WE]进入virtualBox安装目录
[WE]打开cmd并执行...
C:\Program Files\Oracle\VirtualBox>VBoxManage 共享文件夹添加 "default" --name
"/d/SVN_FOLDERS/X2R2_WP6/nodejs" --hostpath "\?\d:\SVN_FOLDERS\X2R2_WP6\nodejs" --automount
查看oracle虚拟机,新的共享文件夹已经出现
[QST] 启动虚拟机
$docker-机器启动
- [QST] 运行 容器 nodejs
docker 停止 nodejs
docker rm nodejs
docker 运行 -d -it --rm --name nodejs -v /d/SVN_FOLDERS/X2R2_WP6/nodejs:/usr/src/app -w /usr/src/app node2
- [QST] 打开 bash 容器
docker exec -i -t nodejs /bin/bash
- [QST]执行dir,你会看到共享文件
如何使用 Docker 工具箱通过简单的 --volume
命令挂载卷,从而在我的 Windows 文件和 docker 容器之间共享文件夹?
我正在使用 "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'.
这实际上是一个 issue of the project 并且有 2 个解决方法:
正在创建数据卷:
docker create -v //c/Users/myuser:/myuser --name data hello-world winpty docker run -it --rm --volumes-from data ubuntu
直接在 docker 主机中进行 SSH:
docker-machine ssh default
然后从那里做经典:
docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
试试这个:
- 打开Docker 快速启动终端。如果它已经打开,运行
$ cd ~
以确保您在 Windows 用户目录中。 $ docker run -it -v /$(pwd)/ubuntu:/windows ubuntu
如果错误是由于错字造成的,它会起作用。您将在您的用户目录中获得一个名为 ubuntu
的空文件夹。您将在 ubuntu 容器中看到名为 windows
的文件夹。
截至 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.
中都有效我通过谷歌搜索找到了这个问题的答案,但找不到任何有用的答案。事情似乎没有任何错误被抛出,但我只是看不到主机上的数据(反之亦然)。最后我仔细检查了设置并尝试了他们显示的格式:
所以首先,你必须在此处的设置中将整个驱动器共享到 docker 虚拟机,我认为这让 hyper-v 中的 'docker-machine' 虚拟机 运行 可以访问它驾驶。然后你必须使用那里显示的格式,它似乎只存在于这一张图片中,没有我在网上找到的文档或问题:
docker run --rm -v c:/Users:/data alpine ls /data
这是对 selected 答案的改进,因为该答案仅限于 c:\Users 文件夹。如果您想使用 c:\Users 之外的目录创建卷,这是一个扩展。
在windows7中,我使用了docker工具箱。它使用了 Virtual Box。
- 打开虚拟盒子
- Select 机器(在我的例子中是默认值)。
- 右键单击并 select 设置选项
- 转到共享文件夹
- 包括一个新的计算机文件夹。
例如,在我的例子中,我包括:
**Name**: c:\dev
**Path**: c/dev
- 点击关闭
- 打开"Docker Quickstart Terminal"并重新启动docker机器。
使用这个命令:
$ docker-machine restart
要验证它是否有效,请执行以下步骤:
- SSH 到 docker 机器。
使用这个命令:
$ docker-machine ssh
- 转到您拥有的文件夹 shared/mounted。
在我的例子中,我使用这个命令
$ cd /c/dev
- 检查文件夹的用户所有者。您可以使用 "ls -all" 并验证所有者将是 "docker"
你会看到这样的东西:
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
这两个命令对我都有效。我希望这会有用。
对于使用 Virtual Box 且更喜欢命令行 方法的用户
1) 确保 docker-机器不是 运行
Docker 快速启动终端:
docker-machine stop
2) 创建共享Windows <-> docker-machine
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-机器并将卷装入新容器
Docker 快速启动终端:
(同样,我正在启动一个 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
我解决了!
添加卷:
docker 运行 -d -v my-named-volume:C:\MyNamedVolume testimage:latest
挂载主机目录:
docker 运行 -d -v C:\Temp3:C:\My\Shared\Dir testimage:latest
如果您正在寻找能够解决所有 Windows 问题并使其在 Windows OS 上以与在 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 )
- 安装 Ubuntu 超过 1 年的 LTS
- 安装docker
- 将共享目录添加到虚拟机并自动挂载您的项目目录(这样您就可以从 Ubuntu 访问项目目录)但仍然可以在 Windows 中工作
- 完成
奖金:
- 一切都与 Linux 上的一样
- Pause/Unpause docker随心所欲的环境
方案二:使用VirtualBox(这与方案一非常相似,但也展示了思考过程,在解决类似问题时可能会有用)
- 读到有人将文件夹移动到 /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 地址(它将具有类似于 docker 机器的 IP)
- 安装 Ubuntu 最近的 LTS(不超过几个月)
- 请注意,自动挂载并没有真正发挥作用,而且集成也被破坏了(比如剪贴板共享等)
- 删除虚拟机
- 出去喝一杯
- 租昂贵的车在高速公路上高速行驶
- 毁车而死
- 在你的电脑前重生
- 安装 Ubuntu 超过 1 年的 LTS
- 尝试运行docker
- 注意它没有安装
- 通过 apt-get install 安装 docker docker
- 安装建议docker.io
- 尝试运行 docker-撰写
- 注意它没有安装
- apt get install docker-compose
- 尝试使用 docker-compose 来 运行 您的项目
- 注意是旧版本
- 检查你的电量(应该超过9000)
- 搜索如何安装最新版本docker并找到官方指南https://docs.docker.com/install/linux/docker-ce/ubuntu/
- 卸载当前的 docker-compose 和 docker.io
- 使用官方指南安装 docker https://docs.docker.com/install/linux/docker-ce/ubuntu/
- 将共享目录添加到虚拟机并自动挂载您的项目目录(这样您就可以从 Ubuntu 访问项目目录,因此您可以 运行 任何 docker 命令)
- 完成
我在 Windows 7:
上简单地使用双前导斜杠对我有用docker run --rm -v //c/Users:/data alpine ls /data/
共享文件夹 virtualBox 工具箱和 windows 7 和 nodejs 图像容器
使用... Docker 快速启动终端 [QST] Windows 探索者 [我们]
让我们开始...
[QST] 打开Docker 快速启动终端
[QST] 停止虚拟机
$docker-机器停止
[WE] 打开一个 windows 资源管理器
[WE]进入virtualBox安装目录
[WE]打开cmd并执行...
C:\Program Files\Oracle\VirtualBox>VBoxManage 共享文件夹添加 "default" --name "/d/SVN_FOLDERS/X2R2_WP6/nodejs" --hostpath "\?\d:\SVN_FOLDERS\X2R2_WP6\nodejs" --automount
查看oracle虚拟机,新的共享文件夹已经出现
[QST] 启动虚拟机
$docker-机器启动
- [QST] 运行 容器 nodejs
docker 停止 nodejs
docker rm nodejs
docker 运行 -d -it --rm --name nodejs -v /d/SVN_FOLDERS/X2R2_WP6/nodejs:/usr/src/app -w /usr/src/app node2
- [QST] 打开 bash 容器
docker exec -i -t nodejs /bin/bash
- [QST]执行dir,你会看到共享文件