2017-10-13 9 views
0

私は最近の投稿Setting up MySQL and importing dump within Dockerfileを読んだが、答えを見つけることができなかった。Docker mysql issue

私が望むのは、作成されたデータベース、ユーザー、その他のデータを使ってカスタムのmysqlイメージを構築することです。ここに私のDockerfile(簡体字)である:

FROM mysql:5.7 

    ENV MYSQL_ROOT_PASSWORD=root 

    RUN service mysql start && \ 
     mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "CREATE DATABASE mydb;" && \ 
     mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "SHOW databases;" && \ 
     service mysql stop 

ENTRYPOINT service mysql start && /bin/sh 

画像が正常に構築され、mydbというデータベースは「SHOWデータベース」の出力として表示されます。 しかし、このイメージに基づいてコンテナを実行すると、ルートパスワードが空でmydbデータベースが見つからないことがわかります。

どうすれば修正できますか?ありがとう?

答えて

0

initスクリプトを使用できます。それはruningて、その後コンテナを初めて起動する新鮮なインスタンス

を初期化RUNコマンド

にMySQLを停止はるかに簡単、 で新しいデータベースを指定した名前が作成され、提供された 構成変数で初期化されます。さらに、 の拡張子.sh、.sql、.sql.gzを持つファイルが実行され、 /docker-entrypoint-initdb.dにあります。ファイルはアルファベットの の順番で実行されます。そのディレクトリにSQL ダンプをマウントして、貢献した データを持つカスタムイメージを提供することで、mysqlサービスに簡単にデータを入れることができます。 SQLファイルは、デフォルトでMYSQL_DATABASE変数によって指定されたデータベース にインポートされます。

+0

ありがとう、セルゲイ。私はそれを試みます。しかし、RUN命令で作成したデータベースが失われたのはなぜですか?最初のコンテナを実行する前にデータベース関連のデータを初期化することは意味がありませんか? – Sergey

+0

これは良い質問です。そのベースイメージを使用する場所に 'Dockerfile'を表示できますか? –

+0

Sergey、私は質問の説明にDockerファイルの内容を指定しました – Sergey