web-dev-qa-db-ja.com

postgresqlコンテナを停止します

データベースコンテナの停止について質問があります。

  • Postgresqlを実行する docker image があります。この画像でコンテナを作成すると、次のようになります。

Sudo docker run --name db -d asg1612/postgresql

  • 次のコマンドを実行します。

/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file =/etc/postgresql/9.3/main/postgresql.conf

  • ディレクトリ/ var/lib/pgdataコンテナボリュームとして作成されます

  • 私はコンテナを次のように停止します:

Sudo docker stop db

データベースは正常に停止しますか?

データが破損していませんか?

データベースが「正常に」停止するかどうかに関係なく、破損したデータはありません。 PostgreSQLは、他の方法で構成しない限り、クラッシュセーフです。ただし、基盤となるファイルシステムとディスクストレージがディスクフラッシュ要求(fsync)を尊重している場合に限ります。進行中のトランザクションは失われますが、破損したり、半分完了したままになっているものはありません。これは、SIGKILLkill -9)サーバー それは定期的に行うのは良い考えではありませんが

発生する主な問題は、PostgreSQLサーバーが突然シャットダウンされた場合、コミットされているがまだ完全には適用されていない作業を回復するためにより多くの作業を行う必要があるため、次回の起動に時間がかかる可能性があることです。 (過度の単純化)。

コンテナ(sysvinit/systemd/upstart)でinitが実行されていない場合、dockerに何らかのシャットダウンスクリプトを明示的に指定しない限り、正常なシャットダウンは実行されない可能性があります。 (私はまだdockerを使用していません)。いくつかの簡単な検索では、コンテナ内のプロセスにSIGTERMを送信するだけであることが示唆されています。これはPostgreSQLにとっては問題ありません 実際にはpg_ctl -m smart 。停止するのに時間がかかる場合があるため、SIGINTを使用して、トランザクションを強制的に中止し、より速くシャットダウンすることを選択できます。

5
Craig Ringer