Docker Compose 挂载 Windows 文件夹

Posted

技术标签:

【中文标题】Docker Compose 挂载 Windows 文件夹【英文标题】:Docker Compose mount Windows folder 【发布时间】:2016-05-31 10:56:07 【问题描述】:

我在 Windows 中使用 Docker Toolbox,并尝试在 docker-compose.yml 文件中挂载一个 Windows 文件夹,如下所示:

nginx:
  image: nginx:latest
  container_name: test_server
  ports:
    - "80:80"
  volumes:
    - /sss:/c/data/www:ro
  environment:
    - VIRTUAL_HOST=test.local

我的目标是将C:\data\www 挂载到已经由 Docker Toolbox 创建的 boot2docker VM 映像,然后从那里挂载到其中的 nginx 容器。

不幸的是,它不起作用。我在 boot2docker 映像中获得了一个文件夹 sss,但它是空的,没有针对我的 Windows 数据。

我做错了什么?是否有更好的做法可以在开发时在 Windows 上使用 Docker(因此您需要在 Windows、Docker VM (boot2docker) 和 Docker 容器之间共享代码)?

【问题讨论】:

请记住,对于 boot2docker,有两层抽象:一个 Linux 虚拟机,然后是在该 VM 中运行的 Docker 引擎。 Docker Compose 对运行 Docker 的 VM 之外的世界一无所知,例如,无法配置 VirtualBox 共享文件夹。 boot2docker 文档中对此进行了一些讨论:github.com/boot2docker/boot2docker#folder-sharing 【参考方案1】:

我的目标是将C:\data\www 挂载到boot2docker VM 映像

来自“Manually sharing directory as docker volume mounting point”:

你需要:

修改您的 VirtualBox 虚拟机(确保首先停止它):

VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount
# in your case
/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default --name www --hostpath 'C:\data\ww' --automount

添加automount to your boot2docker VM:

编辑/创建(root/mnt/sda1/var/lib/boot2docker/bootlocal.sh,(sda1 可能对您有所不同)

添加

mkdir -p <local_dir>
mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir

(您可能需要add the umask as in here)

【讨论】:

所以在 docker-compose.yml 中,卷与 windows 无关,只是从 linux vm 挂载到容器? 是的,它们只在 Linux 的 boot2docker 世界中运行 我有一个严重的问题,我的挂载文件夹对 boot2docker 虚拟机显示正常,但是如果我从 Widows 添加或编辑文件,此文件不会更新回虚拟机有什么想法吗? @Crash21 不在我的头上,但请:用所有截图和细节提出一个新问题,以及(包括 boot2docker 的版本、使用的 VirtualBox 的版本以及用于声明的命令坐骑) 一个问题只针对这个 :) 当我安装 docker 工具箱时,如果我已经安装了 VirtualBox,我应该安装它吗?我没有并且想知道这是否会导致错误。

以上是关于Docker Compose 挂载 Windows 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上使用 docker compose 进行卷绑定

Docker 挂载Mysql用volume方式 docker-compose 登陆不进去

docker-compose:为绑定挂载和托管挂载定义挂载

docker run 和 docker-compose 配置挂载 Volume 并运行 nginx

docker-compose 等待启动,直到挂载主机文件系统

在 docker-compose 中挂载 NFS 卷时连接超时