fix(dispatch): Docker Redis 讓開 6379——本機 redis 會靜默接手,狀態全查錯台 - #72
Merged
Conversation
Mac 上常駐的 redis-server 綁 127.0.0.1:6379、compose 綁 *:6379,localhost 一律
由前者接手。服務跑在主機(REDIS_ADDR=127.0.0.1:6379)時吃的是本機那台,而在容器裡
`redis-cli KEYS` 什麼都查不到——不會報錯,只會讓人把「查錯台」誤判成「鍵沒寫進去」。
改成 ${REDIS_HOST_PORT:-6380}:6379,與 postgis 讓開 5432 同一個做法;README 補上
「只起相依服務、server 跑在主機」的正式段落,並寫明為什麼一定要用 6380。
實證:對兩台各寫一個 whoami 鍵,raw socket 讀 127.0.0.1:6379 → host_redis、
6380 → docker_redis_6380;用新埠跑一輪建單後 ratelimit:* 出現在容器那台、主機那台是空的。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
thothawei
added a commit
that referenced
this pull request
Aug 1, 2026
#72 讓 docker 的 redis 對外發布 6380,但「連到哪一台」這個問題本身還是查不出來, 而且有兩個地方仍把人導回 6379: 1. `scripts/push_e2e.sh` 的起服務註解寫 `REDIS_ADDR=localhost:6379`——照著做就會 重現 #72 修掉的那個坑(靜默連到 Mac 本機的 redis-server)。改成 6380 並寫明理由。 2. `config.Load()` 的缺省值是 `localhost:6379`。這個缺省值只有「服務跑在主機、 又忘了設 REDIS_ADDR」時才會用到——那正是會連錯台的情境。改成 6380。 docker compose 內一律明設 `REDIS_ADDR=redis:6379`,不受這行影響。 順帶更正 `Load()` 的註解:缺省值對應的是「服務在主機、相依服務在 docker」的 本地跑法,不是 compose 內部(compose 會把 DB_HOST/REDIS_ADDR 明設成服務名)。 但真正的根因不是埠號寫錯,是**連錯不會失敗**:兩台都是健康的 redis,ping 都會過, 於是限流/派單狀態寫進了另一台,而你在容器裡怎麼查都查不到。所以最重要的一行是 ping 成功之後把位址印出來(比照 DB 印 statement_timeout 的理由:ops 可見)—— 讓「連到哪一台」變成一行 log,而不是一小時的猜測。 驗收:gofmt 乾淨、go build ./... 通過、go vet ./... 無輸出、 go test ./internal/config/ ok。新增 2 個 config 測試(缺省 6380/明設就照用), 反向驗證:把缺省值改回 6379,缺省那案 FAIL。 啟動 log 那一行只驗到編譯,**沒有實跑觀察**——起 server 會跑 migration,依約定要先問過。 Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
問題
Mac 上常駐的
redis-server綁127.0.0.1:6379,compose 綁*:6379。localhost 一律由前者接手(更精確的 bind 優先),所以 server 跑在主機(REDIS_ADDR=127.0.0.1:6379)時吃的是本機那台。這個衝突不會報錯——服務照跑、限流照運作,只是狀態寫在你沒在看的那台。實際後果:debug 時在容器裡
redis-cli KEYS什麼都查不到,很容易把「查錯台」誤判成「鍵根本沒寫進去」。line-fleet-app 第二十四輪就在這上面繞了一圈。修法
${REDIS_HOST_PORT:-6380}:6379,與 postgis 讓開 5432(DB_HOST_PORT=5433)同一個做法、同一個理由——這個 repo 已經對 postgres 做過一次,redis 是漏網的。docker-compose.yml:改埠 + 寫明「不會報錯,只會靜默連錯台」.env.example:新增REDIS_HOST_PORT=6380README.md:補「只起相依服務、server 跑在主機」的正式段落(過去只散落在各 repo 的 TODO 裡),並給出lsof -nP -iTCP:6379 -sTCP:LISTEN這個判斷指令compose 網路內部走的仍是
redis:6379,服務間連線不受影響。實證(不是改完就算)
對兩台各寫一個
whoami鍵,用 raw socket 讀:127.0.0.1:6379host_redis127.0.0.1:6380docker_redis_6380改完後用
REDIS_ADDR=127.0.0.1:6380起 server 跑一輪建單:ratelimit:U_seed_*出現在容器那台(TTL 27s),主機那台KEYS 'ratelimit*'是空的。下游
line-fleet-app 的 TODO 已同步更正主機跑法為
REDIS_ADDR=127.0.0.1:6380(app PR #97)。🤖 Generated with Claude Code