LoginSignup
3
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-05

起きたこと

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2