[关闭]
@yibo 2015-08-05T06:13:37.000000Z 字数 1254 阅读 4557

关于Docker在Mac OS X上的挂载数据卷的一个坑

docker 数据卷 volume


最近在学习python的web框架,需要一个mysql环境,就用docker搞了一个mysql的container。因为需要持久化存储数据,就需要用到docker的数据卷或数据卷容器。在挂载数据卷的时候遇到了一个坑,怕我以后再掉进坑里,特此记录一下。

为了简单起见,我用-v参数直接挂载数据卷,将“本地”目录/Users/yibo/datadir挂载到容器的/var/lib/mysql,启动命令如下

  1. docker run --name python-mysql -v /Users/yibo/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:latest

这样启动后,我用docker ps -a查看,发现这个容器在启动后直接退出了(因为之前不加-v /Users/yibo/datadir:/var/lib/mysql能顺利启动,所以可以确定这个异常闪退是由挂载数据卷引发的问题)。

这时我本机上自动生成了一个目录/Users/yibo/datadir,这时候以为是权限问题,就把该目录及其子目录的权限全改为777,但是重新启动还是不行。

这时候因为一个手误,在重新创建容器的时候,将/Users/yibo/datadir输入成了/my/yibo/datadir,并顺利启动成功了。但是发现这时本地的root目录下没有这个目录(因为我本来就没这个目录,我不是用root运行的docker,所以它的权限也不足矣让能在/下创建目录)

这个时候突然想起来了,虽然Max OS X和Linux一样,是类UNIX系统,但是docker只原生支持Linux,Mac OS X还是得通过boot2docker将docker运行在VirtualBox虚拟机中的Linux环境中。(我的rMBP基本都不关机,所以boot2docker一直处于running状态,之前也就忘了boot2docker这茬了)

boot2docker ssh进boot2docker中查看了一下,果然,这里有/my/yibo/datadir这个路径,并且mysql的db文件就摆在那里。

在Windows或Mac OS X上运行docker时,永远不要忘记你与docker之间还隔着一“层”——boot2docker。

至此,问题也就解决了,不过又有了一个新的困惑:
在数据卷挂载到容器中时,如果使用了一个比较特殊的目录路径——docker在我本机(Mac)上有读写权限的目录路径,docker在boot2docker那个Linux虚拟机中是会创建这个目录的,理论上来说docker是应该只认那个Linux中那个目录,也只会去读写那个目录。但是实际情况是,docker在我本机上也会生成那个目录(虽然里边没有内容),并且造成容器启动后闪退。个人猜想这可能是docker(或boot2docker)的一个bug。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注