Docker 设置更改后 MariaDB 数据是否丢失?

Is MariaDB data lost after Docker setting change?

我已经在 Docker 中设置了一个基本的 MariaDB 实例 运行ning - 基本上是使用 Kitematic UI 启动容器,更改设置,然后让它 运行.

今天想做个备份,所以用Kitematic改了端口,让机器可以访问,自动备份。在 Kitematic 中更改端口后,它似乎已经启动了一个新的 MariaDB 容器(即我所有的数据似乎都被删除了)。

这是预期的行为吗?而且,更重要的是,是否有任何方法可以恢复看似丢失的数据,或者是否已将其完全删除?

此外,如果数据确实被删除,更改设置(例如暴露的端口)而不丢失所有更改的首选方法是什么? docker commit?

备注:

提前致谢!

更新:

看起来推荐的保留数据的过程(不创建卷或类似的)是:

  1. 提交更改(例如 docker commit <containerid> <name/tag>
  2. 使容器离线
  3. 更新设置,例如公开的端口或其他任何内容
  4. 运行 已提交更改的图像

...取自 this answer.

是的,这是预期的行为。如果你希望你的数据是持久的,你应该从主机(通过 --volume 选项 docker run)或从另一个容器装载卷,并将你的数据库文件存储在这个卷上。

docker run --volume /path/on/your/host/machine:/var/lib/mysql mariadb

丢失更改实际上是容器的核心功能,因此不能省略。通过这种方式,您可以确保在每个 docker run 之间,您都会获得没有任何更改的全新环境。如果您希望您的更改是永久性的,您应该在图像 Dockerfile 中进行,而不是在容器本身中进行。

更多信息请访问官方文档:https://docs.docker.com/engine/tutorials/dockervolumes/.

您似乎没有将容器卷挂载到特定路径。您可以阅读有关卷和将数据存储到容器中的信息 here

您需要 运行 带有容量选项的容器

$ docker run --name some-mariadb -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:tag

其中 /my/own/datadir 是主机上的目录