Docker 设置更改后 MariaDB 数据是否丢失?
Is MariaDB data lost after Docker setting change?
我已经在 Docker 中设置了一个基本的 MariaDB 实例 运行ning - 基本上是使用 Kitematic UI 启动容器,更改设置,然后让它 运行.
今天想做个备份,所以用Kitematic改了端口,让机器可以访问,自动备份。在 Kitematic 中更改端口后,它似乎已经启动了一个新的 MariaDB 容器(即我所有的数据似乎都被删除了)。
这是预期的行为吗?而且,更重要的是,是否有任何方法可以恢复看似丢失的数据,或者是否已将其完全删除?
此外,如果数据确实被删除,更改设置(例如暴露的端口)而不丢失所有更改的首选方法是什么? docker commit
?
备注:
- 运行ning docker 1.12.0 beta for OS X
docker -ps a
显示数据库状态为 "Up for X minutes" 而原始数据库已经运行了几天
提前致谢!
更新:
看起来推荐的保留数据的过程(不创建卷或类似的)是:
- 提交更改(例如
docker commit <containerid> <name/tag>
)
- 使容器离线
- 更新设置,例如公开的端口或其他任何内容
- 运行 已提交更改的图像
...取自 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
是主机上的目录
我已经在 Docker 中设置了一个基本的 MariaDB 实例 运行ning - 基本上是使用 Kitematic UI 启动容器,更改设置,然后让它 运行.
今天想做个备份,所以用Kitematic改了端口,让机器可以访问,自动备份。在 Kitematic 中更改端口后,它似乎已经启动了一个新的 MariaDB 容器(即我所有的数据似乎都被删除了)。
这是预期的行为吗?而且,更重要的是,是否有任何方法可以恢复看似丢失的数据,或者是否已将其完全删除?
此外,如果数据确实被删除,更改设置(例如暴露的端口)而不丢失所有更改的首选方法是什么? docker commit
?
备注:
- 运行ning docker 1.12.0 beta for OS X
docker -ps a
显示数据库状态为 "Up for X minutes" 而原始数据库已经运行了几天
提前致谢!
更新:
看起来推荐的保留数据的过程(不创建卷或类似的)是:
- 提交更改(例如
docker commit <containerid> <name/tag>
) - 使容器离线
- 更新设置,例如公开的端口或其他任何内容
- 运行 已提交更改的图像
...取自 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
是主机上的目录