在 Docker 容器外部安装 MySQL 数据库



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

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

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

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

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

请注意,docker 卷也可以用于此目的,尽管它们的工作方式与绑定挂载不同,因此请确保您使用的是绑定挂载(type=bind(。

此外,我至少见过一种使用绑定挂载不适用于 MySQL 数据的情况。在我的情况下,它使用绑定挂载来绑定装载,该容器使用一个目录作为 VirtualBox 共享文件夹的 Wagrant box 在 Vagrant 盒子内运行。在这种情况下,我遇到了一些内核/块级错误,这些错误阻止了MySQL设置某些文件模式或对数据目录中的某些文件进行低级调用,最终阻止了MySQL启动。我现在忘记了它抛出的错误(我可以返回并检查(,但我不得不切换到卷而不是绑定挂载。这对于我的用例来说很好,但请注意,如果您使用绑定挂载并且 MySQL 由于某些较低级别的磁盘调用而无法启动。

我还应该补充一点,从你的问题/为什么/你想这样做中不清楚,所以我不能主张这样做会很好/做你想做的事。一次只能有一个MySQL进程写入MySQL数据目录,并且这些文件是二进制文件,因此尝试使用MySQL以外的其他内容读取它们似乎很奇怪。但是,如果您有一个用例,您希望 Docker 之外的内容来读取 MySQL 数据文件,则绑定挂载可能会执行您想要的操作。

最新更新