Docker 中 MySQL 容器数据无法保存的解决方法

阅读时长 4 分钟读完

引言

在使用 Docker 进行应用部署时,我们通常会将应用及其依赖打包成镜像并运行容器。但是,有时候我们会遇到 MySQL 容器数据无法保存的问题,也就是当容器启动后,数据是新建的而不是之前存储的。这个问题可能会在很多情况下出现,例如在本地开发或测试环境中。本文将介绍如何解决这个问题,并提供示例代码帮助您更好地理解。

问题原因

在普通的 Docker 环境中,容器内部的数据都是临时存储的。这意味着,当容器停止时,数据也会被删除。如果我们使用 mysql 镜像运行 MySQL 容器,我们发现存储在容器中的数据不会持久化。这是因为默认情况下 MySQL 容器会使用一个没有挂载卷的容器来运行。任何在容器中创建的数据都将无法保存,一旦容器停止,数据就会被删除。

解决方案

为了解决这个问题,我们需要将 MySQL 容器的数据保存在主机的某个目录中。实现这个目的的方法是使用 Docker 卷(通常称为数据卷)。

我们需要创建一个在主机上用于存储数据的目录,然后将其与 mysql 容器中的 /var/lib/mysql 目录相连。下面是如何运行 MySQL 容器并保留数据的示例命令:

这个命令将启动一个名为 mysql 的容器,并将它连接到主机的 /path/to/host/mysql 目录。任何在容器内创建的 MySQL 数据都将存储在这个目录中,从而使它们得以永久保存。

示例代码

下面是 Python 代码片段,演示了如何使用 Docker 卷来保存 MySQL 数据:

-- -------------------- ---- -------
------ --
------ ------

------ - -----------------

- --- --- --------- ----
-------------- - -------

- ------ - ------
------ - ----------------------------------------

- --- --- ---------
--------- - ----------------------
    ------------------
    --------------------
    ---------
        ------------ -
            ------- -----------------
            ------- ----
        -
    --
    -------
        ----------- ----
    --
    -------------
        ---------------------- --------------
    --
    -----------
-

- ----- --- --------- --
----------------- --- ----------------

- --- --- ------ ----
----------- - --------------------------

- ----- ---- ---- -- -----
----------------- ------ -------------- ----------- ------ -- ------- -------- -------

- ---- --- ---------
----------------

- ----- --- --------- -----
-----------------

- ------ --- ---- -- ----- -----
----------------- ------ -------------- ----------- ------ -- ---- ----- ---- ---------

- ----- --
------------------
---------------

运行此脚本后,您可以在主机上的 /var/lib/docker/volumes/mysql_data/_data 目录中找到 MySQL 数据。

总结

在 Docker 中运行 MySQL 容器时,数据不会持久保存。我们可以使用 Docker 卷来解决这个问题。在创建容器时指定卷并绑定到容器内部的数据目录,这样所有的 MySQL 数据将存储在主机中的指定目录中。本文提供了解决方法和示例代码,希望能够帮助读者更好地理解和解决 Docker 中 MySQL 容器数据无法保存的问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b2524a48841e9894e940da

纠错
反馈