2

我已经设置了一个在 Docker 中运行的基本 MariaDB 实例——基本上是从使用 Kitematic UI 启动容器、更改设置并让它运行。

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

这是预期的行为吗?而且,更重要的是,有什么办法可以恢复看似丢失的数据,还是已经完全删除了?

此外,如果实际删除了数据,那么在不丢失所有更改的情况下更改设置(例如暴露的端口)的首选方法是什么? docker commit?

笔记:

  • 为 OS X 运行 docker 1.12.0 beta
  • docker -ps a当原始数据库已经运行了几天时,数据库状态显示为“Up for X minutes”

提前致谢!

更新:

保留数据(不创建卷或类似内容)的推荐过程似乎是:

  1. 提交更改(例如docker commit <containerid> <name/tag>
  2. 使容器脱机
  3. 更新设置,例如暴露的端口或其他任何东西
  4. 运行已提交更改的映像

...取自这个答案

4

2 回答 2

1

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

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

丢失更改实际上是容器的核心特性,因此不能省略。这样,您可以确保在每次之间docker run获得新鲜的环境而无需任何更改。如果您希望您的更改是永久性的,您应该在您的图像中进行更改Dockerfile,而不是在容器本身中进行。

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

于 2016-08-13T19:03:28.363 回答
0

看起来您没有将容器卷安装到某个路径中。您可以在此处阅读有关卷和将数据存储到容器中的信息

你需要运行带有卷选项的容器

$ 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主机上的目录在哪里

于 2016-08-13T19:06:48.397 回答