本人最近在使用docker部署mysql时,在持久化mysql数据时遇到了一个有趣的问题,将排查过程及思考记录在这里,以备后查。
先简单描述下我遇到的问题:在mysql容器中创建了两个数据库,然后使用docker commit想要保存容器的修改为新的镜像,发现只保存下来了新建的一个数据库,而另一个并没有被保存下来。最终通过查看docker文档和自己的实验,发现是mysql镜像中指定了volume为mysql数据路径所致。
具体讲一下我遇到的问题及排查过程:首先我从dockerHub里拉取了最新的mysql镜像来部署
docker pull mysql
然后基于这个镜像创建一个容器
docker run --name mysqldock -e MYSQL_ROOT_PASSWORD=admin -e MYSQL_DATABASE=inst1 -d -p 3066:3066 mysql
这里的MYSQL_ROOT_PASSWORD指定了root账号的密码,MYSQL_DATABASE指定了在容器创建时同时创建的数据库命。MYSQL_DATABASE可以不提供,这样不会预创建数据库。创建好名为mysqldock的容器后,使用
docker exec -it mysqldock bash
进入容器,执行mysql客户端命令,查看mysql的库,发现inst1已经建好:
inst1在容器初始化的时候已经创建
然后手动创建数据库inst2,并且在两个库中创建一些表:
<