将文件从 Windows 共享到 Boot2docker VM 的最佳方式是什么?

What's the best way to share files from Windows to Boot2docker VM?

我已经在 Windows 上准备好我的代码,但我发现要共享到 boot2docker 并不容易。

我还发现 boot2docker 无法持久化我的更改。例如,我在重新启动 boot2docker 后创建了一个文件夹 /temp。这个文件夹不见了,很不方便

当您在 Windows 上有一些代码但需要将它们 docker 化时,您的方法是什么?

---更新---

我尝试更新 VirtualBox 中的设置并重新启动 boot2docker,但它在我的机器上不起作用。

docker@boot2docker:/$ ls -al /c
total 4
drwxr-xr-x    3 root     root            60 Jun 17 05:42 ./
drwxrwxr-x   17 root     root           400 Jun 17 05:42 ../
dr-xr-xr-x    1 docker   staff         4096 Jun 16 09:47 Users/

Boot2Docker 是 VirtualBox 上的小型 Linux 虚拟机 运行。因此,在您可以在 Docker(在此 VM 中为 运行)中使用您的文件(来自 Windows)之前,您必须首先与 Boot2Docker VM 本身共享您的代码.

为此,您可以在 VM 关闭时 mount 您的 Windows 文件夹(此处假定 VM 名称为 default):

C:/Program Files/Oracle/VirtualBox/VBoxManage sharedfolder \
add default -name win_share -hostpath c:/work

(或者您也可以打开 VirtualBox UI 并将文件夹挂载到您的 VM,就像您在屏幕截图中所做的那样!)

现在 ssh 进入 Docker 快速启动终端的 Boot2Docker 虚拟机:

docker-machine ssh default

然后执行挂载:

  1. 在虚拟机中创建一个文件夹:sudo mkdir /VM_share
  2. 将 Windows 文件夹挂载到它:sudo mount -t vboxsf win_share /VM_share

之后,您可以在 Boot2Docker VM 中访问 C:/work

cd /VM_share

现在您的代码已存在于您的 VM 中,您可以将其与 Docker 一起使用,方法是将其作为卷安装到容器中:

docker-machine ssh default
docker run --volume /VM_share:/folder/in/container some/image

或者在构建 Docker 图像时使用它:

...
ADD /my_windows_folder /folder
...

看到这个

我有 Windows 10 家庭版,带有 Docker 工具箱 1.12.2 和 VirtualBox 5.1.6。

我能够在我的容器中成功挂载 C:\Users 下的文件夹,而无需执行任何额外的步骤,例如 docker-machine ssh default

示例:

docker run -it --rm -v /c/Users/antonyj/Documents/code:/mnt ubuntu /bin/bash

所以将文件放在 C:\Users 下可能是最简单的事情。

如果您不想将文件放在 C:\Users 下,则必须按照 .

中的步骤操作

使用Docker工具箱,共享目录只能/c/User:

Invalid directory. Volume directories must be under your Users directory

Enter image description here

Step1&Step2 命令在"Docker Quickstart Terminal"中执行Step1&Step2可以是:

# Step 1. VirtualBox. Add the error in the command line, in the VirtualBox image interface manually add, as shown above.
"C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" sharedfolder add default --name "E_DRIVE" --hostpath "e:\" --automount

# Try 1. Only a temporary effect. Restart VM after sharing failure.
#docker-machine ssh default "sudo mkdir -p /e" # Create a directory identifier, consistent with the Windows drive letter
#docker-machine ssh default "sudo mount -t vboxsf -o uid=1000,gid=50 E_DRIVE /e"

# Try 2. Modify /etc/fstab. Do not use the permanent mount. Each restart /etc/fstab content will be reset
#docker-machine ssh default "sudo sed -i '$ a\E_DRIVE /e vboxsf uid=1000,gid=50 0 0' /etc/fstab"

# Step 2. `C:\Program Files\Docker Toolbox\start.sh` https://github.com/docker/machine/issues/1814#issuecomment-239957893
docker-machine ssh default "cat <<EOF | sudo tee /var/lib/boot2docker/bootlocal.sh && sudo chmod u+x /var/lib/boot2docker/bootlocal.sh
#!/bin/sh
mkdir -p /e
mount -t vboxsf -o uid=1000,gid=50 E_DRIVE /e
EOF
"

然后重启虚拟机。试试这个:docker run --name php-fpm --rm -it -v /e:/var/www/html php:7.1.4-fpm /bin/bash

参考文献:

在系统托盘中,您应该有可爱的 Docker 鲸鱼在游泳。右键单击和 select 设置。

点击应用。这将打开凭据对话框,您需要提供当前的 Windows 凭据。确保您提供正确。我还怀疑您可能需要成为管理员。

要将我们的主机目录 (C:\data) 挂载到容器中,我们将在 运行 连接容器时使用 -v(卷)标志。此处显示示例 运行:

我的本地 Docker 容器中有 CentOS。

docker run -v c:/data:/data **centos** ls /data

使用 Linux 主机(虚拟机名称 'default')挂载共享文件夹 Windows 来宾:

关闭 'default' 虚拟机:

cd "C:\Program Files\Oracle\VirtualBox"
VBoxManage controlvm default poweroff

添加共享文件夹命令行:

./VBoxManage sharedfolder add default -name win_share -hostpath "C:\docker\volumes"

启动虚拟机(仅无头命令行界面):

/VBoxManage startvm headless  default

连接到 ssh:

docker-machine ssh default

创建 VM 共享文件夹目录:

sudo mkdir /sharedcontent

将 Windows 文件夹装载到主机 VM:

sudo mount -t vboxsf win_share /sharedcontent