皆さん、こんにちは。
Discourse の再構築(アップデート)で問題が発生しました。ログを確認したところ、セットアップ中に最初に Redis が起動し、問題なく動作しますが、しばらくしてからセットアップが再度起動しようとして、「server TCP listening socket *:6379: bind: Address already in use」というエラーでクラッシュしました。
何度も試行錯誤し、Gemini の助けも借りて、app.yml に次のコード片を入れました。
hooks: before_db_migrate: - exec: cmd: - "pkill -9 redis-server || true" - "sleep 2" - "exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf &" - "sleep 5"
これで、再構築が進行するようになりました。
問題の Redis インスタンスを強制終了して再起動する、私の修正後のログの一部を以下に示します。
389:C 24 Feb 2026 17:07:21.756 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
389:C 24 Feb 2026 17:07:21.756 * Redis version=7.4.7, bits=64, commit=00000000, modified=1, pid=389, just started
389:C 24 Feb 2026 17:07:21.756 * Configuration loaded
389:M 24 Feb 2026 17:07:21.756 * monotonic clock: POSIX clock_gettime
389:M 24 Feb 2026 17:07:21.757 * Running mode=standalone, port=6379.
389:M 24 Feb 2026 17:07:21.757 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
389:M 24 Feb 2026 17:07:21.757 # Failed listening on port 6379 (tcp), aborting.
I, [2026-02-24T17:07:31.750972 #1] INFO -- : > pkill -9 redis-server || true
I, [2026-02-24T17:07:31.758767 #1] INFO -- : > sleep 2
I, [2026-02-24T17:07:33.761955 #1] INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf &
I, [2026-02-24T17:07:33.765205 #1] INFO -- : > sleep 5
396:C 24 Feb 2026 17:07:33.773 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
396:C 24 Feb 2026 17:07:33.773 * Redis version=7.4.7, bits=64, commit=00000000, modified=1, pid=396, just started
396:C 24 Feb 2026 17:07:33.773 * Configuration loaded
396:M 24 Feb 2026 17:07:33.773 * monotonic clock: POSIX clock_gettime
396:M 24 Feb 2026 17:07:33.774 * Running mode=standalone, port=6379.
396:M 24 Feb 2026 17:07:33.775 * Server initialized
396:M 24 Feb 2026 17:07:33.776 * Loading RDB produced by version 7.4.7
396:M 24 Feb 2026 17:07:33.776 * RDB age 19606 seconds
396:M 24 Feb 2026 17:07:33.776 * RDB memory usage when created 4.60 Mb
396:M 24 Feb 2026 17:07:33.787 * Done loading RDB, keys loaded: 3413, keys expired: 1.
396:M 24 Feb 2026 17:07:33.788 * DB loaded from disk: 0.013 seconds
396:M 24 Feb 2026 17:07:33.788 * Ready to accept connections tcp
私の質問は次のとおりです。なぜ Redis が 2 回起動するのでしょうか?そして、2 回目の起動時に、最初の Redis がポート 6379 でまだハングアップしているのはなぜでしょうか?さらに、すでに利用可能であるのに、なぜそれを使用しようとしないのでしょうか?そして、最後に、何がこの問題を引き起こした可能性があるのでしょうか?傷の原因を知らずに絆創膏を貼っていることはよく分かっていますが、少なくとも今は動作しています。
誰かが尋ねる前に言っておきますが、外部で実行されている他の Redis はありません(もしあれば、再構築の最初の試行でクラッシュしたはずです)。また、Discourse は Docker 上で他の多くのコンテナと共に実行されていますが、数回のアップグレードまではこのような問題は一度もありませんでした。
どんな助けやヒントでもありがたく受け取ります。また、他のトピックで既に解決済みであっても、検索しても見つからなかったので申し訳ありません。