DynamoDB Local: Address already in use (port 8000)

TL;DR — DynamoDB Local 默认绑定端口 8000,而某个东西已经占用了它——一个你没停止的先前的 DynamoDB Local、另一个服务,或一个重复的 serverless-offline/容器。要么释放端口 8000,要么用 -port 在其他端口上启动 Local(并让你的客户端指向它)。

含义

Exception in thread "main" java.net.BindException: Address already in use
   ... Failed to bind to port 8000

DynamoDB Local 是一个 Java 进程,它在端口 8000 上打开一个监听套接字。如果那个端口已被绑定,JVM 就无法占用它并以 BindException 退出。这纯粹是一次本地端口冲突——与 AWS 或凭证无关。

为什么会发生

  • 一个先前的 DynamoDB Local 仍在运行——一个你从未停止的先前的 java -jar DynamoDBLocal.jar(或 docker run)。
  • 另一个服务占用了 8000——同一端口上的一个开发服务器、代理或无关应用。
  • 重复的工具——serverless-dynamodb-localserverless-offline 都试图绑定 8000,或者两个 docker-compose up 栈。
  • 一个崩溃的实例短暂地留下了被绑定的端口TIME_WAIT),或一个僵尸容器。

Serverless and test runners

serverless-dynamodb-local 插件和 Jest globalSetup 挂钩经常启动隐式本地 - 如果你还运行 docker run -p 8000:8000 amazon/dynamodb-local 手动,第二次绑定尝试会因 BindException 而终止,即使 Local 是已经很健康了。每个计算机会话选择一个启动器。在 macOS 上,来自 IDE 测试运行程序的孤立 Java 进程是常见的罪魁祸首 — lsof -i :8000 通常会显示 java 以及早期 Gradle 运行中的 PID。

如何修复

  1. 找出占用端口的东西:
    lsof -i :8000                       # macOS / Linux
    netstat -ano | findstr :8000        # Windows (note the PID)
  2. 停止那个进程(或旧的 DynamoDB Local):
    kill <PID>                          # macOS / Linux
    taskkill /PID <PID> /F              # Windows
  3. 或者在其他端口上运行 DynamoDB Local并更新你的客户端:
    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 8001
    # then: endpoint = http://localhost:8001
  4. Docker? 更改映射的主机侧(-p 8001:8000)并连接到 8001
  5. 移除重复的插件/栈,让只有一个进程尝试绑定该端口。

在 DynoTable 中

释放端口 8000(或将 Local 移至-port 8001)后,install DynoTable 并在 Settings → Profiles → 添加 Profile 中添加本地配置文件:设置端点 http://localhost:8000(或你的备用端口),占位符区域,以及字母数字虚拟凭证。 Test Connection确认模拟器是在浏览表格之前先听一下。演练: Running DynamoDB Local· Connect to DynamoDB Local & LocalStack。当你更改端口时,更新配置文件端点以匹配 - 配置文件仍然当 Local 监听 :8001 时,指向 :8000 会产生 connection refused偶数绑定冲突解决后。 DynamoDB JSON converter 一旦本地可达,帮助加载种子数据。

相关错误

来源

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

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