Edited at

DockerでMySQL/PostgreSQLの初期データが生成されないときに確認すること

More than 1 year has passed since last update.

Dockerにて、MySQLやPostgreSQLを構築しようとしたとき、初期データとしてユーザやデータベースを作成しておきたい、なんてことはよくあるんじゃないでしょうか。


そんなときは、/docker-entrypoint-initdb.d/の下に、.sh,.sql,.sql.gzらの拡張子でファイルを置いておくと、よしなにしてくれるそうです。


Dockerfile

...

COPY ./db/init.sql /docker-entrypoint-initdb.d/

...



init.sql

CREATE USER hoge_user WITH CREATEDB;


しかし、何度もbuildしてはコンテナに入って確認し…

なんてことを続けていると、「ユーザ名変えたはずなのに変わってない」「データがインポートできなくなった!」

と、自分のミスではないところで時間を取られてしまうことになります。

そんな時は、以下の点に気をつけて確認してみると良いかもです。

キャッシュを使わずにbuildしてみましょう

$ docker-compose build --no-cache

コンテナに、以前実行されたものがないか確認して、もしあれば消してみましょう

$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76960e4db0df xxxxxxxxxxxxxx_app "irb" 12 hours ago Exited (1) 10 seconds ago xxxxxxxxxxxxxx_app_1
5cf684f2a2dd xxxxxxxxxxxxxx_db "docker-entrypoint..." 12 hours ago Exited (0) 6 seconds ago xxxxxxxxxxxxxx_db_1

$ docker rm 76960e4db0df 5cf684f2a2dd

参考:Initializing a fresh instance 辺り