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 代理。

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