@yibo
2015-08-05T06:13:37.000000Z
字数 1254
阅读 4557
docker
数据卷
volume
最近在学习python的web框架,需要一个mysql环境,就用docker搞了一个mysql的container。因为需要持久化存储数据,就需要用到docker的数据卷或数据卷容器。在挂载数据卷的时候遇到了一个坑,怕我以后再掉进坑里,特此记录一下。
为了简单起见,我用-v
参数直接挂载数据卷,将“本地”目录/Users/yibo/datadir
挂载到容器的/var/lib/mysql
,启动命令如下
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。