windows主机与Docker容器文件夹共享


前言

在windows下使用Docker ToolBox时,有时候我们需要将主机某个文件夹共享到docker容器中,方便在windows主机与docker容器之间同步文件夹数据。但是我们都知道Docker ToolBox会启动virtualbox虚拟机,docker实际上是运行在虚拟机上的,而不是直接运行在windows主机上,所以没办法直接通过docker run-v 参数实现主机与docker容器文件夹共享。

本文将介绍如何在windows下实现主机与docker容器之间的文件夹共享。 主要有两大步骤:

  1. 配置windows主机与virtualbox虚拟机之间文件夹共享。

  2. 配置virtualbox虚拟机与docker容器之间文件夹共享。

我们都知道docker run-v 参数可以实现docker容器与宿主机之间目录共享。对于使用Docker Toolbox的情况,宿主机是并不是windows主机,而是在windows主机上通过virtualbox运行的虚拟机。因此,docker容器只能与虚拟机之间进行文件夹共享,要实现windows主机与docker容器之间文件夹共享,我们还需要配置windows主机与虚拟机之间文件夹共享,从而间接实现windows主机与docker容器之间文件夹共享。

一、 配置windows主机与virtualbox虚拟机之间文件夹共享

1. 在VirtualBox中添加共享文件夹

首先,打开Oracle VM VirtualBox管理器:

选择Docker ToolBox默认创建的default 虚拟机,点击工具栏的“设置”按钮,打开设置窗口:

点击左侧菜单栏的“共享文件夹”打开共享文件夹设置面板。

默认情况下,virtualbox已经配置了c/Users目录为共享文件夹,对应虚拟机里的共享目录为/c/Users

如果我们想共享其他文件夹,那么我们需要点击右侧的“添加共享文件夹”按钮:

添加一个共享文件夹配置,如下:

如上图所示,我添加了一个名称为MyBlog 的共享文件夹,指向windows主机的E:\\workspace\\MyBlog 目录。同时,勾选“自动挂载”和“固定分配”。

PS:我共享该文件夹的目的是,以后在我本机上对我的blog的修改就可以动态同步到docker容器中,达到实时生效的目的

点击OK保存。

2. 挂载共享文件夹

添加共享文件夹后,需要将其挂载到虚拟机上。

1) 自动挂载到默认目录

由于我们前面添加共享文件夹时勾选了自动挂载,当我们重启虚拟机后,共享文件夹就会被自动挂载到虚拟机上,不用手动挂载。

所以接下来我们启动Docker Quickstart Terminal,运行如下命令重启虚拟机:

docker-machine restart

重启后,运行如下命令进入虚拟机:

docker-machine ssh

进入虚拟机后,检查一下我们的共享文件夹是否自动挂载上了。共享文件夹会被自动挂载到根目录下,路劲为:/<共享文件夹名称> ,如下是我的例子:

docker@default:~$ ll /MyBlog
total 8
-rwxrwxrwx    1 docker   staff         1183 Jun 11 14:07 MyBlog.iml
-rwxrwxrwx    1 docker   staff         2263 Jun 11 14:05 pom.xml
drwxrwxrwx    1 docker   staff            0 Jun 11 14:05 src/
drwxrwxrwx    1 docker   staff            0 Jun 11 14:09 target/

可以看到,windows主机E:\workspace\MyBlog 里的内容已经共享到虚拟机/MyBlog 下了。

2) 挂载到指定目录

当然,我们也可以将共享文件夹挂载到虚拟机的指定目录下。

通过docker-machine ssh命令进入虚拟机,然后在虚拟机中创建一个目录。我们将要把windows主机的共享文件夹挂载到该目录。例如,创建/home/docker/MyBlog :

mkdir /home/omc/MyBlog

我们现在查看该目录下是没有任何内容的:

docker@default:~$ ll /home/docker/MyBlog
total 0

接下来,将windows主机的共享文件夹挂载到该目录,运行如下命令:

sudo mount -t vboxsf MyBlog /home/docker/MyBlog

然后查看/home/docker/MyBlog目录:

docker@default:~$ ll /home/docker/MyBlog/
total 8
-rwxrwxrwx    1 root     root          1183 Jun 11 14:07 MyBlog.iml
-rwxrwxrwx    1 root     root          2263 Jun 11 14:05 pom.xml
drwxrwxrwx    1 root     root             0 Jun 11 14:05 src/
drwxrwxrwx    1 root     root             0 Jun 11 14:09 target/

可以看到已经成功挂载了!

但是,这种方式有一个弊端:每当重启虚拟机后,新创建的目录会丢失。

我们可以通过如下方式解决这个问题

编辑/mnt/sda1/var/lib/boot2docker/profile 文件中:

sudo vi /mnt/sda1/var/lib/boot2docker/profile

在文件最后增加如下配置:

mkdir /home/docker/MyBlog
sudo mount -t vboxsf MyBlog /home/docker/MyBlog

保存退出虚拟机,执行如下命令重启虚拟机:

docker-machine restart

重启后,再次执行docker-machine ssh 进入虚拟机,查看是否自动挂载到我们指定的目录/home/docker/MyBlog

docker@default:~$ ll /home/docker/MyBlog/
total 8
-rwxrwxrwx    1 root     root          1183 Jun 11 14:07 MyBlog.iml
-rwxrwxrwx    1 root     root          2263 Jun 11 14:05 pom.xml
drwxrwxrwx    1 root     root             0 Jun 11 14:05 src/
drwxrwxrwx    1 root     root             0 Jun 11 14:09 target/

可以看到,挂载成功!

二、配置virtualbox虚拟机与docker容器之间文件夹共享

这个就很简单了,在执行docker run命令时,通过-v参数虚拟机某个目录挂载到docker容器中。

如下,将前面在虚拟机中创建的/home/docker/MyBlog目录挂载到docker容器的/usr/tmp/MyBlog中:

docker run -v /home/docker/MyBlog:/usr/tmp/MyBlog -i -t centos /bin/bash

进入docker容器后,查看/usr/tmp/MyBlog目录:

root@d478e4c6c7f2:/# ll /usr/tmp/MyBlog/
total 20
drwxrwxrwx 1 root root 4096 Jun 11 14:09 ./
drwxr-xr-x 3 root root 4096 Jul 28 15:52 ../
drwxrwxrwx 1 root root 4096 Jun 27 13:52 .idea/
-rwxrwxrwx 1 root root 1183 Jun 11 14:07 MyBlog.iml*
-rwxrwxrwx 1 root root 2263 Jun 11 14:05 pom.xml*
drwxrwxrwx 1 root root    0 Jun 11 14:05 src/
drwxrwxrwx 1 root root    0 Jun 11 14:09 target/

可以看到,windows主机共享文件夹里的内容被成功同步到docker容器中了!


文章作者: yglong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yglong !
评论
  目录