Hallo zusammen.
Ich hatte ein Problem beim Neuaufbau (Update) von Discourse. Im Protokoll fand ich heraus, dass während des Setups Redis zum ersten Mal gestartet wird, ohne Probleme, aber nach einer Weile versucht das Setup, es erneut zu starten, und stürzt mit der Meldung „server TCP listening socket *:6379: bind: Address already in use“ ab.
Nach mehreren Versuchen und Irrtümern, auch mit Hilfe von Gemini, habe ich diesen Codeabschnitt in die app.yml eingefügt:
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"
und schließlich wird der Neuaufbau fortgesetzt.
Hier ist ein Protokollausschnitt mit meiner Lösung, bei der die hartnäckige Redis-Instanz beendet und neu gestartet wird:
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
Meine Frage ist nun: WARUM zwei Redis-Starts? Und warum findet der zweite den ersten noch auf Port 6379 hängend? Und warum versucht er nicht, ihn zu verwenden, wenn er bereits verfügbar ist? Und nicht zuletzt, was könnte dieses Problem verursacht haben? Ich weiß sehr wohl, dass ich eine Salbe auf eine Wunde gelegt habe, ohne zu wissen, WARUM die Wunde da ist, aber zumindest läuft es jetzt.
Bevor jemand fragt: NEIN, ich habe kein anderes Redis außerhalb von Discourse laufen (sonst wäre der erste Versuch zu Beginn des Neuaufbaus fehlgeschlagen), und JA, Discourse läuft mit vielen anderen Containern auf Docker, auch wenn es bis vor ein paar Upgrades nie solche Probleme gab.
Jede Hilfe und jeder Tipp ist willkommen, und entschuldigt, falls dies bereits in einem anderen Thema gelöst wurde, aber ich habe erfolglos gesucht.