データベースコンテナの停止について質問があります。
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)を尊重している場合に限ります。進行中のトランザクションは失われますが、破損したり、半分完了したままになっているものはありません。これは、SIGKILL
(kill -9
)サーバー それは定期的に行うのは良い考えではありませんが 。
発生する主な問題は、PostgreSQLサーバーが突然シャットダウンされた場合、コミットされているがまだ完全には適用されていない作業を回復するためにより多くの作業を行う必要があるため、次回の起動に時間がかかる可能性があることです。 (過度の単純化)。
コンテナ(sysvinit/systemd/upstart)でinit
が実行されていない場合、dockerに何らかのシャットダウンスクリプトを明示的に指定しない限り、正常なシャットダウンは実行されない可能性があります。 (私はまだdockerを使用していません)。いくつかの簡単な検索では、コンテナ内のプロセスにSIGTERM
を送信するだけであることが示唆されています。これはPostgreSQLにとっては問題ありません 実際にはpg_ctl -m smart
は 。停止するのに時間がかかる場合があるため、SIGINT
を使用して、トランザクションを強制的に中止し、より速くシャットダウンすることを選択できます。