Docker:将容器数据持久化到托管的正确方法

时间:2015-02-04 15:18:20

标签: mysql docker volumes

我正在使用OSX并在Boot2docker VM上运行docker。

我一直试图弄清楚如何将容器的数据(MySQL官方码头图像)保存到主机但却没有太大成功。

我一直收到一条错误,指出无法访问MySQL服务尝试写入的/ var / lib / mysql目录。

docker run -e MYSQL_ROOT_PASSWORD=12345 -v "$(pwd)/.docker-volumes/mysql:/var/lib/mysql" mysql:5.6

查看容器中已安装库的权限,这就是我所看到的:

root@mysql:/# ls -la /var/lib/
total 44
drwxr-xr-x 16 root    root    4096 Jan 27 18:35 .
drwxr-xr-x 18 root    root    4096 Jan 27 18:35 ..
drwxr-xr-x  7 root    root    4096 Jan 27 18:35 apt
drwxr-xr-x 14 root    root    4096 Jan 27 18:35 dpkg
drwxr-xr-x  2 root    root    4096 Jul 14  2013 initscripts
drwxr-xr-x  2 root    root    4096 Jul 14  2013 insserv
drwxrwsr-x  2 libuuid libuuid 4096 Dec 11  2012 libuuid
drwxr-xr-x  2 root    root    4096 Dec 24 13:41 misc
drwxr-xr-x  1    1000 staff    102 Feb  4 15:10 mysql
drwxr-xr-x  2 root    root    4096 Jan 27 16:48 pam
drwxr-xr-x  2 root    root    4096 Nov 23  2012 update-rc.d
drwxr-xr-x  2 root    root    4096 Jul 14  2013 urandom

如您所见,mysql目录由1000拥有,属于“' staff'

”。

我的假设是运行MySQL的服务进程可能设置为另一个用户(mysql),因此我收到此错误。

我已经读过这个特定的问题可以使用卷数据容器来解决,但由于它们只保留数据,直到最后一个容器实际使用它们的卷,这对我来说不是一个好的解决方案。 / p>

我是以错误的方式接近这个吗?

感谢。

1 个答案:

答案 0 :(得分:1)

使用data-volume容器肯定会更好,我对本地psqlcouchdb数据库做同样的事情。数据实际上仍然存在,除非您将卷链接到容器,否则它无法访问。要实际强制删除卷,您必须指定docker rm -v,如果没有其他容器链接到该数据卷,则会删除该数据卷。