Could not connect to DynamoDB Local (ECONNREFUSED)
TL;DR — 在你的用戶端撥號的地方沒有任何東西在監聽。確認 DynamoDB Local 確實執行在你預期的埠上,並且你用戶端的 endpoint 指向 http://localhost:8000——而不是真實 AWS。
這是什麼意思
Error: connect ECONNREFUSED 127.0.0.1:8000TCP 連線被拒絕:模擬器沒有在那個主機/埠上執行,或者用戶端指向了一個沒有任何東西在監聽的地方。
為什麼會發生
- DynamoDB Local 未執行——它從未啟動、崩潰了,或被關閉了(參見啟動程序錯誤)。
- 埠錯誤——Local 在
8000上,而用戶端撥的是8080(或者容器對映了一個不同的主機埠)。 - 未設定
endpoint——沒有它,SDK 會與_真實_ AWS 對話,而非 localhost(隨後表現為認證/區域錯誤,或者如果你覆蓋了主機則表現為被拒絕)。 - Docker 網路——從另一個容器看,
localhost是那個容器,而不是主機。使用服務名/主機閘道器。 localhost與127.0.0.1的解析怪癖(IPv6::1)。
Typical setups
| 設定 | 端點 | 問題 |
|---|---|---|
| Docker 預設 | http://localhost:8000 | 容器必須釋出 -p 8000:8000 |
| 自定義埠 | http://localhost:8001 | 匹配罐子上的-port 8001和**用戶端 |
| 撰寫服務 | http://dynamodb:8000 | 來自另一個容器 - 不是 localhost |
| 錯誤地真實AWS | https://dynamodb.<region>.amazonaws.com | 當你指的是雲時,請刪除 endpoint |
在 Windows 上,WSL 和主機有時對於哪個程序擁有所有權存在分歧
localhost:8000 — 如果 curl 在 WSL 中工作,但主機上的 Node 得到
ECONNREFUSED,將主機用戶端明確指向127.0.0.1或執行 Local
用戶端執行的地方。
DynoTable 在本地設定檔案上的 Test Connection 是最快的檢查你配置的端點上有一些答案 - 它失敗並顯示相同的資訊當本地關閉時拒絕套接字。
如何修正
- 確認它在監聽:
curl http://localhost:8000 # DynamoDB Local returns a small response lsof -i :8000 # something should own the port - 在用戶端上顯式設定端點:
import {DynamoDBClient} from '@aws-sdk/client-dynamodb'; const client = new DynamoDBClient({ region: 'local', endpoint: 'http://localhost:8000', credentials: {accessKeyId: 'local', secretAccessKey: 'local'} }); - 匹配模擬器實際繫結的埠(以及 Docker 的
-p host:container對映)。 - 跨容器? 使用容器/服務名(例如
http://dynamodb-local:8000)或host.docker.internal,而不是localhost(host.docker.internal在 Docker Desktop 中自動解析;在 Linux Docker Engine 上新增--add-host host.docker.internal:host-gateway)。
DynoTable 工作臺
Install DynoTable,然後 Settings → Profiles → 新增 Profile
端點http://localhost:8000。按⌘P切換到本地設定檔案一旦curl http://localhost:8000成功。憑證點應保持綠色當本地啟動時;如果因連線錯誤而變為紅色,則埠或端點設定檔案與模擬器偵聽的位置不匹配。使用
DynamoDB JSON converter 之後載入夾具本地可達。如果 curl http://localhost:8000 失敗,則模擬器未執行 — 啟動 Docker
或者先裝罐子(Unable to start DynamoDB Local process)。當埠錯誤但有東西正在偵聽時,你可能會看到一般 HTTP 錯誤而不是 ECONNREFUSED;將設定檔案端點與任何lsof -i :8000匹配報告。指南:Connect to DynamoDB Local & LocalStack。
相關錯誤
- Unable to start DynamoDB Local process
- 設定中缺少區域
- 學習:Running DynamoDB Local · Connecting to DynamoDB Local / LocalStack
來源
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide(預設端口 8000、啟動命令、Docker 執行/編寫示例)
- DynamoDB local usage notes — AWS DynamoDB Developer Guide(本地端點@@P12@@;SDK 需要訪問金鑰 + 區域值)
- amazon/dynamodb-local — Docker Hub(官方映象,@@P13@@)
- ⟦2⟧ — Docker CLI reference(@@P14@@ /
host-gateway用於容器到主機的連線)