#起きたこと
Postgres コンテナの初期化処理のときに、 pg_restore
コマンドを使い、リストアをしたかったが何故かpg_restore
終了時にコンテナが落ちた。
※通常初期データを入れる方法は
https://qiita.com/kashi0001/items/8d8f9055cbc3ef719127
を参照
docker-compose
postgres:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_DB: test
volumes:
volumes:
- ./postgres_init:/docker-entrypoint-initdb.d
- ./postgresql/data:/var/lib/postgresql/data
environment:
- TZ=Asia/Tokyo
create.sh (./postgres_init)配下
~いろいろ処理~
pg_restore -c -d test -U test ./test.dmp &>/dev/null
echo "ここで落ちる"
~いろいろ処理~
修正
create.sh (./postgresql/data)配下
bash << EOS
#!/bin/bash
echo "リストア開始"
pg_restore -c -d test -U test ./test.dmp &>/dev/null
echo "リストア終了"
EOS
原因
おそらくpg_restore
が終了したときに exitコードをなげそれをDockerコンテナのメインプロセス上で受け取ってしまっている。
よって bash で明示的に実行することにより、別プロセス実行し、そのプロセスがエラーで落ちても、メインプロセスに影響が及ばないようにする。