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 run 和 docker-compose 配置挂载 Volume 并运行 nginx