0

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

そしてビルドし、この新しい 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

しかし、それはエラーです

[エラー] 致命的なエラー: 特権テーブルを開いたりロックしたりできません: テーブル 'mysql.user' が存在しません

4

1 に答える 1

2

エラー メッセージは、mysql が読み取る mysql ファイルがないことを示しています。

問題は、mysql のインストール後にパーティションをマウントしているため、パーティションが空になることです。

解決策: --initialize または --initialize-insecure を指定して mysql を起動します

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

于 2016-05-25T22:44:29.397 に答える