Docker容器关闭后,容器产生的数据还在磁盘上吗?


比如我在一个容器中运行了 MySQL 数据库,里面包含 1 T 数据,容器关闭后,这个 1 T 数据还存在吗?从宿主机能找到这个 1 T 数据吗(或者说我能不能使用新建的容器访问这 1 T 数据)?能的话,过程是怎么样的?
已邀请:

杨章显 - 思科系统运维工程师

赞同来自: bazz2 -knowmara


如楼上,如果你想数据持久化,需使用volume或者data container,这样在容器关闭后可以再通过-v或者--volumes-from重新使用以前的数据。

refactoring - 啥都做的技术管理者

赞同来自: DockOne


综上所述,我觉得应该为所有镜像或容器的数据目录设置Volume,如配置文件目录,数据文件目录,重要的日至文件目录。 如此,方可放心使用容器技术

refactoring - 啥都做的技术管理者

赞同来自:


除非你使用了数据卷(Volume)或数据容器,否则容器内运行期间产生的数据在容器关闭后,又回到你启动容器时的原始镜像状态.

苦逼少侠 - 去哪儿网互联网研发工程师,docker爱好

赞同来自:


使用volume把产生的数据挂载到宿主机。别的容器初始化这些数据文件就能恢复数据了。
可以使用tutum/mysql这个镜像,还支持数据导入、指定帐号、主从配置能功能。

refactoring - 啥都做的技术管理者

赞同来自:


@bazz2 @杨章显 @苦逼少侠

昨晚思考如何找回1T 数据时,找到了一些信息,希望对你有帮助,有出入还望指正。
(注:我以官方的mysql镜像为参考)
官方mysql镜像产生的Docker容器,其运行期间产生的所有文件都可在宿主机磁盘中找到.其根本原因还是设置了Volume

我没有参考源代码,直接查看系统中的Docker数据目录,发现了相关数据及逻辑。

Docker数据目录: /var/lib/docker
--containers 存储所有未删除容器的配置文件
--vfs/dir 存储所有容器(包括已删除的)运行期间产生的数据

containers下的文件夹以容器ID命名,其中包含这个容器的所有配置文件。 config.json文件中最后几个Volumes属性即为容器数据文件的存储目录。

Yanxi-Com

赞同来自:


容器关闭后重新进去,数据还在原处吧,比如
  1. 通过 docker ps -a 看到关闭的容器
  2. docker start your_container_name
  3. docker attach your_container_name

xqzhou - 码男

赞同来自:


容器每次都会以初始化运行的image的状态来启动,如果想保留运行状态中的更改数据,一个走volume,一个走commit。

田浩浩 - wizmacau developer

赞同来自:


docker inspect mysql-container-id

找到里面的volume字段 有显示挂载的host路径

然后题主就可以备份数据了!

<完>

要回复问题请先登录注册