将文件从 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
然后执行挂载:
- 在虚拟机中创建一个文件夹:
sudo mkdir /VM_share
- 将 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
参考文献:
- http://hessian.cn/p/1502.html
- Windows + Boot2Docker, How to add D:\ drive to be accessible from within docker?
在系统托盘中,您应该有可爱的 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
我已经在 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
然后执行挂载:
- 在虚拟机中创建一个文件夹:
sudo mkdir /VM_share
- 将 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
参考文献:
- http://hessian.cn/p/1502.html
- Windows + Boot2Docker, How to add D:\ drive to be accessible from within docker?
在系统托盘中,您应该有可爱的 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