在Docker容器外安装MySQL数据库

时间:2020-01-28 23:52:04

标签: mysql docker containers

我可以使用mysql运行docker容器,并将数据库(数据)保存在容器外部吗?

1 个答案:

答案 0 :(得分:1)

是的,可以。您可以在创建docker容器时使用绑定安装,以将主机上的路径安装到容器内的某个路径:

https://docs.docker.com/storage/bind-mounts/

例如,您可以在容器内将主机OS的/ home // mysqldata挂载为/ var / lib / mysql。当docker容器内的进程尝试在容器内的/ var / lib / mysql中读取/写入文件时,实际上将在主机OS的/ home // mysqldata目录/文件夹中读取/写入数据。例如:

docker run -it --mount type=bind,source=/home/bob/mysqldata,target=/var/lib/mysql <some_image_name>

请注意,尽管Docker卷的工作方式与绑定安装不同,但也可以使用docker卷,因此请确保您使用的是绑定安装(类型=绑定)。

此外,我已经看到至少一种情况,对于MySQL数据,无法使用绑定安装。在我的情况下,它为在Vagrant框内运行的docker容器使用绑定挂载,使用的目录是VirtualBox共享文件夹。在那种情况下,我遇到了一些内核/块级错误,这些错误阻止MySQL设置某些文件模式或对数据目录中的某些文件进行低级调用,最终导致MySQL无法启动。现在我完全忘记了它抛出了什么错误(我可以返回并检查),但是我不得不切换到卷而不是绑定挂载。这对我的用例来说很好,但是请注意是否使用绑定安装,并且由于某些较低级别的磁盘调用而导致MySQL无法启动。

我还应该补充一点,从您的问题/为什么/您想这样做起,尚不清楚,所以我不能主张这样做会好/做您想做的事。一次只能将一个MySQL进程写入MySQL数据目录,并且这些文件是二进制文件,因此尝试用MySQL以外的其他文件读取它们似乎很奇怪。但是,如果您有一个用例,想让Docker之外的其他人读取MySQL数据文件,则绑定安装可能会做您想要的事情。

相关问题