DockerのPostgreSQLでdocker-entrypoint-initdb.dで指定したSQLが実行されない
今回はDockerのPostgreSQLでdocker-entrypoint-initdb.dで指定したSQLが実行されないとき、何が原因だったのかについてご紹介していこうと思います。
DockerのPostgreSQLでdocker-entrypoint-initdb.dで指定したSQLが実行されない
私は下記のようなdocker-compose.ymlの構成でコンテナ開始時にSQLを実行するようにしておりました。
1 2 3 4 5 6 7 8 9 10 |
version: '3' services: db: volumes: - ./docker-postgres/initdb:/docker-entrypoint-initdb.d - ./docker-postgres/data:/var/lib/postgresql/data environment: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASS} PGDATA: /var/lib/postgresql/data/pgdata |
しかし上記で、「./docker-postgres/initdb」の配下に「sample.sql」というファイルを配置してdocker-compose upを実行しましたが、「sample.sql」が叩かれている様子はありませんでした。
docker-entrypoint-initdb.dに配置したファイルは上記の場合だと「./docker-postgres/initdb」の配下にあるファイルがアルファベット順で実行されており、ログに出ないため実際にPostgreSQLの中に入ってSQLがエラーなく正常に実行できるかどうか見た方が良いということでしたが、私の場合は特に間違っている様子はありませんでした。
結論から言うと、私の場合は初歩的な勘違いで、上記の例であれば「./docker-postgres/data」を空っぽにしていないことが原因でした。
「./docker-postgres/data」の中にはDBのデータが格納されることになるのですが、前のデータが残っていたということですね。
「./docker-postgres/data」を空っぽにして再度docker-compose upをしたら「./docker-postgres/initdb」の配下にあるSQLファイルが実行されていることが確認できました。
終わりに
今回はDockerのPostgreSQLでdocker-entrypoint-initdb.dで指定したSQLが実行されないとき、何が原因だったのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません