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 8000DynamoDB Local 是一個 Java 程序,它在埠 8000 上開啟一個監聽套接字。如果那個埠已被繫結,JVM 就無法佔用它並以 BindException 退出。這純粹是一次本地埠衝突——與 AWS 或憑證無關。
為什麼會發生
- 一個先前的 DynamoDB Local 仍在執行——一個你從未停止的先前的
java -jar DynamoDBLocal.jar(或docker run)。 - 另一個服務佔用了 8000——同一埠上的一個開發伺服器、代理或無關應用。
- 重複的工具——
serverless-dynamodb-local和serverless-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。
如何修正
- 找出佔用埠的東西:
lsof -i :8000 # macOS / Linux netstat -ano | findstr :8000 # Windows (note the PID) - 停止那個程序(或舊的 DynamoDB Local):
kill <PID> # macOS / Linux taskkill /PID <PID> /F # Windows - 或者在其他埠上執行 DynamoDB Local並更新你的用戶端:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 8001 # then: endpoint = http://localhost:8001 - Docker? 更改對映的主機側(
-p 8001:8000)並連線到8001。 - 移除重複的外掛/棧,讓只有一個程序嘗試繫結該埠。
在 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
一旦本地可達,幫助載入種子資料。
相關錯誤
- Unable to start DynamoDB Local process——模擬器因其他原因(Java、原生庫)啟動失敗。
- Could not connect to DynamoDB Local (ECONNREFUSED)——反面:你撥號的地方沒有任何東西在監聽。
- 學習:Running DynamoDB Local
來源
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide(預設端口8000;“如果端口8000不可用,該命令會拋出異常”)
- DynamoDB local usage notes — AWS DynamoDB Developer Guide(@@P6@@命令列選項和完整旗標列表)
- amazon/dynamodb-local — Docker Hub(官方映象和端口對映)