问题现象:
     建立表并存有数据的mysql container通过docker commit的方式生成的镜像,然后利用镜像创建容器,能正常连接,但里面没有之前的数据
问题来源及场景:
      docker入坑菜鸟一枚,有个项目用的是mysql,想带着里面的数据进行迁移,我使用了mysql的docker镜像启了后台服务,在这个容器配置好用户信息之后,并且也建了个表,存放了数据,然后我想对这个容器打包成镜像,利用镜像重新创建的container,docker run -i  -p  3306:3306  -t  image,连接之后发现之前建的数据库丢失了
       请问这是怎么回事

解决方案 »

  1.   

    mysql数据库中的数据默认是存放在/var/lib/mysql目录下的,而mysql容器通常是将容器内的/var/lib/mysql作为volume挂载,当你使用commit命令把容器打包成镜像时,commit操作并不会包含容器内挂载的volume中的数据变化,所以会发现数据都不在了。我这两天也是在这个坑里踩了好久
      

  2.   

    进容器看了下发现数据的确是在/var/lib/mysql这个目录下,这样的话有没有啥优雅的方式将挂载卷的数据一起打包进去的,我只能想到再挂载/var/lib/mysql到linux本地,然后再进行打包塞到镜像里,感觉不是很优雅了