Edited at

DockerのPostgresで初回起動時にpg_restoreをする


起きたこと

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 で明示的に実行することにより、別プロセス実行し、そのプロセスがエラーで落ちても、メインプロセスに影響が及ばないようにする。