DynamoDB Local: Address already in use (port 8000)
TL;DR — DynamoDB Local varsayılan olarak 8000 portuna bağlanır ve bir şey onu zaten tutuyor — durdurmadığınız daha önceki bir DynamoDB Local, başka bir hizmet ya da yinelenen bir serverless-offline/kapsayıcı. Ya 8000 portunu serbest bırakın ya da Local'i -port ile farklı bir portta başlatın (ve istemcinizi ona yöneltin).
Ne anlama gelir
Exception in thread "main" java.net.BindException: Address already in use
... Failed to bind to port 8000DynamoDB Local, 8000 portunda dinleme soketi açan bir Java sürecidir. O port zaten bağlıysa, JVM onu talep edemez ve BindException ile çıkar. Bu tamamen bir yerel port çakışmasıdır — AWS veya kimlik bilgileriyle ilgisi yoktur.
Neden olur
- Önceki bir DynamoDB Local hâlâ çalışıyor — hiç durdurmadığınız önceki bir
java -jar DynamoDBLocal.jar(ya dadocker run). - Başka bir hizmet 8000'e sahip — aynı portta bir geliştirme sunucusu, proxy veya ilgisiz bir uygulama.
- Yinelenen araçlar —
serverless-dynamodb-localveserverless-offline'ın her ikisi de 8000'e bağlanmaya çalışıyor ya da ikidocker-compose upyığını. - Çökmüş bir örnek portu kısa süre bağlı bıraktı (
TIME_WAIT) ya da bir zombi kapsayıcı.
Serverless ve test koşucuları
serverless-dynamodb-local eklentisi ve Jest globalSetup kancaları Local'i çoğu
zaman örtük olarak başlatır — ayrıca elle
docker run -p 8000:8000 amazon/dynamodb-local çalıştırıyorsanız, Local zaten
sağlıklı olsa bile ikinci bağlanma denemesi BindException ile ölür. Makine oturumu
başına tek bir başlatıcı seçin.
macOS'ta bir IDE test koşucusundan kalan sahipsiz Java süreçleri sık rastlanan bir
suçludur — lsof -i :8000 çoğu zaman daha önceki bir Gradle çalıştırmasından kalma
PID'li bir java gösterir.
Nasıl düzeltilir
- Porta neyin sahip olduğunu bulun:
lsof -i :8000 # macOS / Linux netstat -ano | findstr :8000 # Windows (note the PID) - O süreci durdurun (ya da eski DynamoDB Local'i):
kill <PID> # macOS / Linux taskkill /PID <PID> /F # Windows - Ya da DynamoDB Local'i farklı bir portta çalıştırın ve istemcinizi güncelleyin:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 8001 # then: endpoint = http://localhost:8001 - Docker mı? Eşlemenin ana bilgisayar tarafını değiştirin (
-p 8001:8000) ve8001'e bağlanın. - Yinelenen eklentileri/yığınları kaldırın, böylece porta yalnızca bir süreç bağlanmaya çalışsın.
DynoTable’da
Bağlantı noktası 8000'i serbest bıraktıktan sonra (veya Yerel'i -port 8001'a taşıdıktan sonra), install DynoTable
ve Ayarlar → Profiller → Profil Ekle'ye giderek bir Yerel profil ekleyin: uç noktayı ayarlayın
http://localhost:8000 (veya alternatif bağlantı noktanız), bir yer tutucu bölge ve
alfasayısal kukla kimlik bilgileri. Bağlantıyı Test Et emülatörün çalıştığını doğrular
Tablolara göz atmadan önce dinleyin. İzlenecek yol:
Running DynamoDB Local ·
DynamoDB Local ve LocalStack'e bağlanma.
Bağlantı noktalarını değiştirdiğinizde profil uç noktasını eşleşecek şekilde güncelleyin; hâlâ bir profil
Yerel :8001'ü dinlerken :8000'yi işaret etmek
connection refused hatta
bağlama çatışması çözüldükten sonra. DynamoDB JSON converter
Yerel ulaşılabilir olduğunda tohum verilerinin yüklenmesine yardımcı olur.
İlgili hatalar
- Unable to start DynamoDB Local process — emülatör başka nedenlerle başlayamıyor (Java, yerel kitaplıklar).
- Could not connect to DynamoDB Local (ECONNREFUSED) — diğer yüz: aradığınız yerde hiçbir şey dinlemiyor.
- Öğrenin: Running DynamoDB Local
Kaynaklar
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (default port 8000; "If port 8000 is unavailable, this command throws an exception")
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (the
-portcommand line option and full flag list) - amazon/dynamodb-local — Docker Hub (official image and port mapping)
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.