안녕하세요 여러분.
Discourse를 다시 구축(업데이트)하는 과정에서 문제가 발생했습니다. 로그를 확인해 보니 설정 단계에서 Redis가 처음에는 문제 없이 시작되지만, 잠시 후 설정 과정이 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가 두 번 시작되나요? 그리고 왜 두 번째 시작 시도가 6379 포트에서 여전히 대기 중인 첫 번째 인스턴스를 발견하게 되는 걸까요? 그리고 이미 사용 가능한 상태라면 왜 이를 사용하려고 시도하지 않는 걸까요?
마지막으로, 이 문제를 유발한 원인은 무엇일까요? 저는 상처의 원인조차 모른 채 단순히 연고를 바르는 것과 같은 상황을 잘 알고 있지만, 적어도 지금은 시스템이 작동하고 있습니다.
누군가 물어볼까 봐 미리 말씀드리자면, 아니요, Discourse 외부에서 다른 Redis가 실행되고 있지는 않습니다(만약 있었다면 재구축 초기 단계에서 첫 번째 시도가 크래시되었을 것이므로). 그리고 네, Discourse는 Docker에서 다른 여러 컨테이너와 함께 실행되고 있지만, 몇 번의 업그레이드 전까지는 이런 문제가 전혀 없었습니다.
도움이나 팁을 주시면 감사하겠습니다. 다른 주제에서 이미 해결된 문제라면 죄송하지만, 검색해 보았지만 성공하지 못했습니다.