Help us understand the problem. What is going on with this article?

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

More than 3 years have 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 辺り

enta0701
iwate-pu
岩手県滝沢市にある公立大学です。Qiitaではソフトウェア情報学部生や出身の人が多いです。
https://www.iwate-pu.ac.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away