MySQL データベースを含むコンテナを作成し、これらのデータベースにスキーマを追加しようとしています。
現在の Dockerfile は次のとおりです。
FROM mysql
MAINTAINER (me) <email>
# Copy the database schema to the /data directory
COPY files/epcis_schema.sql /data/epcis_schema.sql
# Change the working directory
WORKDIR data
CMD mysql -u $MYSQL_USER -p $MYSQL_PASSWORD $MYSQL_DATABASE < epcis_schema.sql
コンテナを作成するには、Docker で提供されているドキュメントに従って、次のコマンドを実行します。
docker run --name ${CONTAINER_NAME} -e MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} -e MYSQL_USER=${DB_USER} -e MYSQL_PASSWORD=${DB_USER_PASSWORD} -e MYSQL_DATABASE=${DB_NAME} -d mvpgomes/epcisdb
しかし、このコマンドを実行してもコンテナは作成されず、コンテナのステータスでは CMD が正常に実行されなかったことがわかります。実際にはコマンドのみがmysql
実行されています。
とにかく、スキーマを使用してデータベースを初期化する方法はありますか、それともこれらの操作を手動で実行する必要がありますか?
ベストアンサー1
私も同じ問題を抱えていました。MySQL Docker インスタンスのスキーマを初期化したいのですが、Google で検索したり他の人の例に従ったりしても、うまく動作しませんでした。解決方法は次のとおりです。
1) MySQL スキーマをファイルにダンプします。
mysqldump -h <your_mysql_host> -u <user_name> -p --no-data <schema_name> > schema.sql
2) ADD コマンドを使用して、/docker-entrypoint-initdb.d
Docker コンテナ内のディレクトリにスキーマ ファイルを追加します。このファイルは、このディレクトリ内の で終わるすべてのファイルをMySQL データベースに対してdocker-entrypoint.sh
実行します。".sql"
Dockerファイル:
FROM mysql:5.7.15
MAINTAINER me
ENV MYSQL_DATABASE=<schema_name> \
MYSQL_ROOT_PASSWORD=<password>
ADD schema.sql /docker-entrypoint-initdb.d
EXPOSE 3306
3) Docker MySQLインスタンスを起動します。
docker-compose build
docker-compose up
MySQL を設定して Dockerfile 内にダンプをインポートすることで、docker-entrypoint.sh について、またそれが SQL とシェル スクリプトの両方を実行するという事実について知ることができました。