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

时间:2016-08-13 18:12:50

标签: mysql docker mariadb kitematic

我已经设置了一个在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. 等设置
  5. 使用已提交的更改运行图像
  6. ......取自this answer

2 个答案:

答案 0 :(得分:1)

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

docker run

失去更改实际上是容器的核心功能,因此不能省略。通过这种方式,您可以确保在每个docker run --volume /path/on/your/host/machine:/var/lib/mysql mariadb 之间获得新环境而无需任何更改。如果您希望更改是永久性的,则应在图像的docker run中进行更改,而不是在容器本身中进行。

有关详细信息,请访问官方文档:https://docs.docker.com/engine/tutorials/dockervolumes/

答案 1 :(得分:0)

看起来你不会将容器容量装入某个路径。您可以阅读有关卷和将数据存储到容器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是主机上的目录