如何将RBD镜像(ceph)挂载到mysql docker的默认数据目录下

我想mysql读取/写入数据到我的RBD图像。 我使用rbd-docker-plugin从https://hub.docker.com/_/mysql/挂载RBD到docker pull

首先我试试

docker run -it --volume-driver=rbd --volume foo:/mnt/foo ceph/base bash

我在Docker中触摸/ mnt / foo里的“aa”文件,然后停止docker,当我把foo挂载到另一个docker时,“aa”文件依然存在


然后我将我的代码添加到此Docker文件中

 RUN mkdir -p /mnt/foo/mysql RUN sed -i -e 's/\/var\/lib\/mysql/\/mnt\/foo\/mysql/g' /etc/mysql/my.cnf VOLUME /mnt/foo/mysql 

并build立,从这个新的Dockerfile运行docker

 docker run -it --volume-driver=rbd --volume storage2/foo:/mnt/foo -e MYSQL_ROOT_PASSWORD=password [image_id] 

当我执行容器,我可以使用MySQL和我看到/ mnt / foo / mysql中的mysql(和“aa”文件)的数据,但是当我停止docker和挂载foo到另一个docker,我看不到有关mysql我仍然看到“aa”文件)


最后我试试

 docker run --name some-mysql --volume-driver=rbd --volume foo:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql 

但是错误

[错误]致命错误:无法打开和locking权限表:表'mysql.user'不存在

错误消息说,没有MySQL文件供MySQL读取。

问题在于你在安装mysql之后挂载了分区,所以分区将是空的。

解决方法:用–initialize或–initialize-insecure启动mysql

http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html