Could not connect to DynamoDB Local (ECONNREFUSED)

TL;DR — 在你的用戶端撥號的地方沒有任何東西在監聽。確認 DynamoDB Local 確實執行在你預期的埠上,並且你用戶端的 endpoint 指向 http://localhost:8000——而不是真實 AWS。

這是什麼意思

Error: connect ECONNREFUSED 127.0.0.1:8000

TCP 連線被拒絕:模擬器沒有在那個主機/埠上執行,或者用戶端指向了一個沒有任何東西在監聽的地方。

為什麼會發生

  • DynamoDB Local 未執行——它從未啟動、崩潰了,或被關閉了(參見啟動程序錯誤)。
  • 埠錯誤——Local 在 8000 上,而用戶端撥的是 8080(或者容器對映了一個不同的主機埠)。
  • 未設定 endpoint——沒有它,SDK 會與_真實_ AWS 對話,而非 localhost(隨後表現為認證/區域錯誤,或者如果你覆蓋了主機則表現為被拒絕)。
  • Docker 網路——從另一個容器看,localhost 是那個容器,而不是主機。使用服務名/主機閘道器。
  • localhost127.0.0.1 的解析怪癖(IPv6 ::1)。

Typical setups

設定端點問題
Docker 預設http://localhost:8000容器必須釋出 -p 8000:8000
自定義埠http://localhost:8001匹配罐子上的-port 8001和**用戶端
撰寫服務http://dynamodb:8000來自另一個容器 - 不是 localhost
錯誤地真實AWShttps://dynamodb.<region>.amazonaws.com當你指的是雲時,請刪除 endpoint

在 Windows 上,WSL 和主機有時對於哪個程序擁有所有權存在分歧 localhost:8000 — 如果 curl 在 WSL 中工作,但主機上的 Node 得到 ECONNREFUSED,將主機用戶端明確指向127.0.0.1或執行 Local 用戶端執行的地方。

DynoTable 在本地設定檔案上的 Test Connection 是最快的檢查你配置的端點上有一些答案 - 它失敗並顯示相同的資訊當本地關閉時拒絕套接字。

如何修正

  1. 確認它在監聽:
    curl http://localhost:8000        # DynamoDB Local returns a small response
    lsof -i :8000                     # something should own the port
  2. 在用戶端上顯式設定端點:
    import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
    const client = new DynamoDBClient({
      region: 'local',
      endpoint: 'http://localhost:8000',
      credentials: {accessKeyId: 'local', secretAccessKey: 'local'}
    });
  3. 匹配模擬器實際繫結的埠(以及 Docker 的 -p host:container 對映)。
  4. 跨容器? 使用容器/服務名(例如 http://dynamodb-local:8000)或 host.docker.internal,而不是 localhosthost.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

相關錯誤

來源

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。