質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

10631閲覧

docker初回起動時、マウントしたSQLファイルが実行されない

wwwww

総合スコア41

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/05/11 23:59

編集2020/05/18 15:20

■概要

wordpress開発環境をdockerで構築しています。docker-compose.yml(※)をつかって、

※詳細後述。
(実行したいSQLを配置した)ホストのディレクトリを、
(docker-entrypoint-initdb.dに)マウントし、
初期状態でDBにデータが入っている状態にしたいと考えています。

docker-compose up -d   ```で実行。 実行後、 ```ここに言語を入力 docker ps ``` で表示されるうちの DB用コンテナである mysql-container に、 ```ここに言語を入力 sudo docker exec -it コンテナ名 /bin/bash

で当該コンテナに入り、コンテナ側マウント先である docker-entrypoint-initdb.d/ に、当該SQLファイルが入っていることは確認できています。
※この時点(初回起動→マウントされる時点)でSQLは実行されている前提理解。

同一docker-compose.ymlで構築したphpmyadminにアクセスし、DB更新内容を確認したところ、更新がかかっていませんでした。

SQL走ってないのか、確認先のデータベースが間違っているのか(?)などは、確定させられていない現状です。
そこから地力解決が困難となってしまい…お伺いさせて頂く次第でございます。

■詳細

●docker-compose.yml

services: #データボリュームコンテナ db-container: image: busybox volumes: - db-volume:/var/lib/mysql/ #MySQL mysql-container: image: mysql:5 volumes: # - db-volume:/var/lib/mysql - ./db-volume:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD=dbpass01 - MYSQL_ROOT_USER=root - MYSQL_DATABASE=wordpress - MYSQL_USER=wp_user - MYSQL_PASSWORD=dbpass01 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes_from: - db-container depends_on: - db-container restart: always ports: - 3306:80 #phpmyadmin pma-container: image: phpmyadmin/phpmyadmin environment: - PMA_HOST=mysql-container - PMA_ROOT_PASSWORD=dbpass01 - PMA_USER=wp_user - PMA_PASSWORD=dbpass01 ports: - 8080:80 depends_on: - mysql-container restart: always #wordpress wp-container: image: wordpress environment: - WORDPRESS_DB_HOST=mysql-container - WORDPRESS_DB_USER=root - WORDPRESS_DB_PASSWORD=dbpass01 ports: - 80:80 depends_on: - mysql-container restart: always #データボリューム volumes: db-volume:

●ディレクトリ構成

TEST ←カレントディレクトリ  ├docker-compose.yml  └db-volume   └mysql_test.sql ←「create database test_db1;」 とだけ記載しています

■環境情報

・Windows10
・VirtualBox 6.1
・Docker 19.03.6

以上、手掛かりになるようなことでも、ご教示いただけますと幸甚です。
何卒よろしくお願いいたします。
(情報に不足等あれば、その旨ご教示ください。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

volumesのdb-volumeを削除してから再実行されても同じでしょうか?
docker-entrypoint-initdb.dはデータフォルダにファイルがあると再ロードしません。

投稿2020/05/12 01:00

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwwww

2020/05/12 05:07

comefigoさん、ありがとうございます! ボリュームコンテナ含めてすべて一度RMし、一からUPしてみましたが、変わりありませんでした。。
comefigo

2020/05/12 05:54

なるほど。 以下はどうでしょうか? ・phpmyadminにアクセスしているユーザはmysqlのroot権限でしょうか? ・docker logs mysqlコンテナ でinitdb処理でdatabase作成成功メッセージが出力されていますでしょうか? ・mysqlコンテナにログインして、上記のSQLを直接実行し、phpmyadminから確認できるでしょうか?
wwwww

2020/05/18 14:28

comefigoさん、再度ありがとうございます!ご回答遅くなり誠に申し訳ございません。。 >phpmyadminにアクセスしているユーザはmysqlのroot権限でしょうか? →すいません、確認ができませんでした。ログイン画面を経ず、メニュー画面に行き、(外部サーバでの本番環境で使っている画面において動作する)ログアウトへの遷移もうまくいかない他、画面上から現在のユーザがわかるものにたどり着けませんでした。 >docker logs mysqlコンテナ でinitdb処理でdatabase作成成功メッセージが出力 →docker logs mysqlコンテナ で確認したところ、なさそうな印象です。「database」「initdb」など文字列検索してもありませんでした。 ※強いて挙げれば、それらしきとして、Completed initialization of buffer pool と、ありました。 >mysqlコンテナにログインして、上記のSQLを直接実行し、phpmyadminから確認 →こちらは問題なく確認できました。 上記の上で、確認すべきことあれば、お手数ですがご教示のほどお願いいたします。 ※諸々ご記載頂いているものは、問題点の特定を目指してのもの、と理解しています。 できていないところについて、ふかぼってみます。ありがとうございます。
comefigo

2020/05/18 14:55

https://hub.docker.com/_/mysql に記載されている環境変数(MYSQL_ROOT_PASSWORD、MYSQL_USER、MYSQL_PASSWORD)も加えて実行してみてください。そして、phpmyadminにログインする際はこちらの環境変数を指定してログインしてください。 上記に合わせて、mysqlのdb-volume:/var/lib/mysqlをコメントアウトして実行してみてください。 問題なく作成されたら、コメントを解除してください。
wwwww

2020/05/18 15:24 編集

ありがとうございます! ご記載通りの情報を追記し(※)、restartしました。 ※当追記版全量を、質問本編のdocker-compose.ymlに追記しました >問題なく作成されたら、コメントを解除してください。 ※「問題なく作成」というのは、initdb.dで実行したいSQL実行の結果作成される新DBではなく、上記restartによるdocker(アプリ)のこと、と理解しています。 →restartの結果、(アプリ)作成されました。PMAページ開き確認したところ、新しいDB作成(initdbにて実行されていてほしいSQL)は未実行のままでした。 コメント解除し、再起動なりをすればよろしいのでしょうか…? また、お手数おかけしすいません、、 >上記に合わせて、mysqlのdb-volume:/var/lib/mysqlをコメントアウトして実行 →「上記に合わせて、」の理屈が追えていません。MYSQLとPMAのログイン情報と、ボリュームのマウントがどう関わっているのでしょうか?
comefigo

2020/05/18 15:43

まず、docker-entrypoint-initdb.dを含むDBコンテナはDBを初期化する際にデータディレクトリ(/var/lib/mysql)が空であれば、docker-entrypoint.shがdocker-entrypoint-initdb.d配下のsqlやshを実行し、初期データ投入処理するように作られています。 https://github.com/docker-library/mysql/blob/7397711170daed7ebba3bf373af143e5179906fc/5.7/docker-entrypoint.sh そのため、データディレクトリにすでにファイルがあるとコンテナ起動時に初期データ投入処理が実行されない。もし、再度初期データ投入してほしい場合は、ボリューム(ホストにマウントしていれば、それらのファイル)を削除して、再度コンテナを起動する必要があります。
comefigo

2020/05/18 15:53 編集

> restartの結果、(アプリ)作成されました。PMAページ開き確認したところ、新しいDB作成(initdbにて実行されていてほしいSQL)は未実行のままでした restartではなく、docker-compose down → docker volume rm db-volumeで一度削除してからdocker-compose up してください。なお、上記のdocker-compose.ymlでコメントアウトしているようなので、ボリュームの削除は不要です。 > 「上記に合わせて、」の理屈が追えていません。MYSQLとPMAのログイン情報と、ボリュームのマウントがどう関わっているのでしょうか? 意図として、ボリュームの影響でデータが正しく投入されていない可能性があるので、問題の切り分けとしてボリュームをコメントアウトして頂いた次第です。 なので、ボリュームがコメントアウトされた状態で問題なければ、改めてボリュームのコメントアウトを解除して(併せて上記のボリュームの削除を実行)、再度docker-compose upしてください。
wwwww

2020/05/19 14:29 編集

ありがとうございます!m(_ _)m コメントアウトしている状態で、再度docker-compose upしましたが、依然として初期データ投入したいSQLは未実行でした。 のち別途、downの上、コメントアウト外してボリューム削除→upした結果、初期データ投入されていました! ※ご記載内容の理解と、上記作業の解釈については、少々お待ちください。。 ■追記 >ボリュームがコメントアウトされた状態で問題なければ →問題がなければ、とおっしゃるのは、問題なくデータ投入できるかではなく、問題なくupできるか、という理解で正しいでしょうか?(その理解にしかならないため…)
wwwww

2020/05/19 14:32

githubやdockerHubを参照として挙げててくださっているように、今後は適宜それらも参考にしていきたいと思います!(概念がわかっていなかったり、英語がとっつきにくいですが・・・) 長々とお手間いただき、誠にありがとうございました。m(_ _)m
comefigo

2020/05/19 15:47

> のち別途、downの上、コメントアウト外してボリューム削除→upした結果、初期データ投入されていました! 無事に投入されたならよかったです。 ボリュームをマウントしている(データの永続化状態)とコンテナを破棄してもデータが残り続けます。今回のようにゴミデータ(初期データが投入されていない状態)を消したい場合は、ボリュームごと削除することが必要です。 > 問題がなければ、とおっしゃるのは、問題なくデータ投入できるかではなく、問題なくupできるか、という理解で正しいでしょうか? 問題なくデータを投入できるかですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問