我已经设置了一个在Docker中运行的基本MariaDB实例 - 基本上是使用Kitematic UI启动容器,更改设置并让它运行。
今天,我想进行备份,所以我使用Kitematic来更改端口,以便我可以从机器访问它以进行自动备份。在Kitematic中更改端口之后,似乎已经启动了一个新的MariaDB容器(即我的所有数据似乎都被删除了)。
这是预期的行为吗?而且,更重要的是,有没有办法恢复看似丢失的数据,还是已经完全删除了?
此外,如果实际删除了数据,更改设置的首选方法是什么 - 例如公开的端口 - 而不会丢失所有更改? docker commit
?
注意:
docker -ps a
在原始文件已启动数天后将数据库状态显示为“Up for X minutes”提前致谢!
更新
看起来保留数据(不创建卷或类似内容)的建议过程是:
docker commit <containerid> <name/tag>
)......取自this answer。
答案 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
是主机上的目录