PostgreSQL
docker

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