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 agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。