今回の事象
docker-compose.ymlに記述したPostgreSQLのinit.sqlが起動時に実行されなかった。
下記の記事を見てvolumesの削除を試みたが、何も変わらなかった状態。
https://qiita.com/kondo0602/items/ab0a85fb1e731234eb1a
(抜粋)docker-compose.yml
postgres:
image: postgres:latest
container_name: my_postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- ./data:/var/lib/postgresql/data
- ./init:/docker-entrypoint-initdb.d
init.sql
-- テーブル作成
CREATE TABLE my_table (
id serial PRIMARY KEY,
name VARCHAR (100) NOT NULL
);
-- サンプルデータの登録
INSERT INTO my_table (name) VALUES ('John Doe');
原因
どうやら下記の記事によるとdataディレクトリ配下にファイルがあるとinit.sqlは実行されないとのこと。
恐らくパスの指定ミスでdocker-compose up時にinit.sqlが実行されずdataディレクトリ配下にファイルが作成されたことが原因。コンテナを再実行しても初期化がスキップされていた。
https://stackoverflow.com/questions/59715622/docker-compose-and-create-db-in-postgres-on-init
補足
docker-compose logsで下記のエラーが表示されていたら初期化はスキップされています。(dataディレクトリ配下にファイルが存在する状態)
PostgreSQL Database directory appears to contain a database; Skipping initialization
対処
data配下のファイルを全て削除した上で、docker-compose upを再実行。
→psqlを叩くと無事解消されていた。
postgres=# \dt
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+----------+----------+----------
public | my_table | テーブル | postgres
(1 行)