2016-03-07 6 views
5

私は、docker上でMySQLデータベースを使用するアプリケーションをホストしようとしています。私はドッカーの作成を使用しています。私のYMLファイルは次のようになります。私は、DBスキーマを作成し、YMLフォルダに保存されdbcreation.sqlを持ってDockerを使ってmysql dbを作成するにはどうしたらいいですか?

version: '2' 
volumes: 
    data_sql:  
services: 
medical-mysql: 
    image: mysql 
    hostname: medical-mysql  
    volumes:  
    - data_sql:/dbcreation.sql 
    environment: 
     MYSQL_DATABASE: Medical 
     MYSQL_ROOT_PASSWORD: root 
     STARTUP_SQL: data_sql 
    ports: 
    - "3306:3306" 
    medical-main: 
    build: . 
    ports: 
    - "8080:8080"  
    depends_on: 
    - medical-mysql 

。 ymlファイルを実行すると、ファイルが実行されていないかのように見えます。

私は何が欠けていますか?

+0

data_sqlとdbcreation.sqlを呼び出すときは何ですか? – Mattia

+0

data_sqlは、単に作成ファイルをホストするために作成したボリュームです。私はそれを行うための他の方法を見つけることができませんでしたが、これも動作しません。 –

+0

dbcreation.sqlにdata_sqlがマウントされているようです。あなたはdbを決して作成しません。/var/lib/mysqlにコピーする必要があります(mysql -u user db Mattia

答えて

10

1)dbcreation.sql

2ダンプファイルを作成します)import.shファイルを作成します。

#!/usr/bin/env bash 
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql 

3)ドッキングウィンドウ-compose.yaml

database: 
    image: mysql 
    container_name: database.dev 
    command: mysqld --user=root --verbose 
    volumes: 
    - ./dbcreation.sql:/tmp/dbcreation.sql 
    - ./import.sh:/tmp/import.sh 
    ports: 
    - "3306:3306" 
    environment: 
    MYSQL_DATABASE: "test" 
    MYSQL_USER: "test" 
    MYSQL_PASSWORD: "test" 
    MYSQL_ROOT_PASSWORD: "root" 
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 
を作成します。

" - ./dbcreation.sql:/tmp/dbcrea tion.sql」 - " - LOCAL_PATH:path_inside_container"

4)を実行します

docker-compose up 
docker exec database.dev bash /tmp/import.sh 
+0

これを使用するにはdbcreation.sqlを使用しないでください。一度私の主なコンテナが立ち上がると、DBが構築されている必要があります。それは私に私が欲しかったところに到達するための多くの手がかりを与えました。私は、mysqlコンテナの作成を別々のymlファイルに分割しました。私は以下のファイルを作成しました: docker-compose -f mysql.yml up -d sleep 10; ドッカーエグゼクティブmedical-mysql bash /tmp/import.sh docker-compose up これは機能します。 mysqlコンテナがスリープ状態よりも準備ができていることを確認する良い方法はありますか? –

+0

@IzharLotemコンテナではなく、内部のアプリケーションです。コンテナは準備ができていますが、コンテナ内のアプリケーションにはありません。 アプリケーションレベルで解決する必要があります。あなたはあなたの "メインコンテナ"でMySQLデータベースの健全性をチェックしたり、Dockerfileの中のCMDを上書きしたり、インポートが完了したらどこかにフラグを置くことができます。とにかくそれはドッカーの仕事ではありません。 – ashatrov

+0

これは、@ashatrovありがとうありがとう – Devang

3

単純に(つまり、フォルダ内の自分の.sqlファイル(dbcreation.sql)を置きます。 /にmysql_init)と、このようなボリュームとしてフォルダを追加します。

volumes: 
    - /mysql_init:/docker-entrypoint-initdb.d 

MySQLの画像は、起動時に/docker-entrypoint-initdb.d内のすべての.sql、.SHと.sql.gzファイルを実行します。

関連する問題