再起動ポリシーの永続的な構成

こんにちは。

内部のDiscourseインスタンスを実行するために、launcherスクリプトでdiscourse_dockerリポジトリを使用しています。OSのアップグレード/再起動時にDockerコンテナを停止したままにできるように、再起動ポリシーをalwaysからunless-stoppedに永続的に変更したいと考えています。

launcherスクリプトの変数として再起動ポリシーが表示されていることは確認できましたが、新しいコンテナがビルドされたときにこの設定を維持する最善の方法は何でしょうか?これは、「launcher rebuild」と/admin/upgrade経由のdocker_managerの両方で機能するはずです。

よろしくお願いいたします。
.sascha

「いいね!」 1

他に誰もこれを尋ねたことはないと思いますし、明白な方法も見当たりません。停止したままにして、再度起動したい場合は、以下のコマンドを実行するのが最善だと思います。

  ./launcher destroy app

そして、以下で起動します。

  ./launcher start app

これによりコンテナが破棄されるため、コンテナ内で行った変更(docker_managerからのアップグレードなど)はすべて破棄されます。

ああ、これもあります。

tl;dr: 再ビルドごとに docker update --restart=unless-stopped app を実行してください。

「いいね!」 2

はい、わかっています :wink: Dockerのアップデートは現在行っています。しかし、次の再構築のいずれかで忘れてしまうのではないかと心配です。そのため、永続化する方法についての質問です。
別の選択肢としては、ランチャースクリプトを編集して、プル時のリベースの競合が多すぎないことを願うだけです :wink:

再起動後に問題が発生したのは、app.yml から web_only.yml に切り替えた際に app コンテナを破棄し忘れた場合のみでした。Docker のアップグレードや再起動は、オートスタートの問題なく定期的に行っています。参考までに、過去 5 年間でこの件について懸念している人を他に見たことはありません。私が知らない何か特別なことをしているのでなければ、あまり心配しない方が良いのではないでしょうか?

本日、問題となったのは、独自にアップデートされなかった奇妙な 2.4.0-betaXYZ があったため、クリーンインストールを実行したかったことです。クリーンインストールした別の VM でテストを行い、バックアップを 2.7.12 に復元したところ、完璧に機能しました(データコンテナを redis と postgres に分割しました)。

現在、メインサーバーは古い Ubuntu と古い Docker を実行していたため、以下のことを行いたかったのです。

  1. バックアップを取得する
  2. Discourse をシャットダウンする
  3. 再起動を伴う OS アップグレードの作業を行う
  4. クリーンインストールを実行する
  5. バックアップを復元する

コンテナをすぐに削除せず、オフのままにしておきたかったのです。テスト中に忘れてしまった何かが必要になるかもしれないと確信が持てなかったからです。そして、unless-stopped は私にとって完璧な再起動ポリシーだと考えました。なぜなら、手動で停止しない限り、コンテナが再起動後に自動的に起動することを保証してくれるからです。通常、私が望むことなので、なぜそれを永続化しようとしないのかと思いました。

それが不可能でも大したことではありません。:slight_smile: Docker のアップデートを実行するだけです(または、あまりにも頻繁に忘れる場合は、cron を使用して 5 分ごとに Docker のアップデートを実行します)。