DynamoDB Lokal : Alamat sudah digunakan (port 8000)
TL;DR — DynamoDB Lokal mengikat port 8000 secara default, dan sesuatu sudah menahannya — DynamoDB Lokal sebelumnya yang tidak Anda hentikan, layanan lain, atau duplikat serverless-offline/container. Bebaskan port 8000 atau mulai Lokal pada port lain dengan -port (dan arahkan klien Anda ke sana).
Apa artinya
Exception in thread "main" java.net.BindException: Address already in use
... Failed to bind to port 8000Mengapa itu terjadi
- DynamoDB Lokal sebelumnya masih berjalan —
java -jar DynamoDBLocal.jar(ataudocker run) sebelumnya tidak pernah Anda hentikan. - Layanan lain memiliki 8000 — server pengembang, proxy, atau aplikasi yang tidak terkait pada port yang sama.
- Perkakas duplikat —
serverless-dynamodb-localdanserverless-offlinekeduanya mencoba mengikat 8000, atau dua tumpukandocker-compose up. - Contoh yang error membuat port terikat sebentar (
TIME_WAIT), atau container zombie.
Tanpa server dan test runner
Plugin serverless-dynamodb-local dan hook Jest globalSetup sering kali dijalankan
Lokal secara implisit — jika Anda juga menjalankan docker run -p 8000:8000 amazon/dynamodb-local
secara manual, upaya pengikatan kedua mati dengan BindException meskipun Lokal
sudah sehat. Pilih satu peluncur per sesi mesin.
Di macOS, proses Java yang ditinggalkan dari test runner IDE sering kali menjadi penyebabnya
— lsof -i :8000 sering menampilkan java dengan PID dari proses Gradle sebelumnya.
Bagaimana cara memperbaikinya
- Temukan pemilik port tersebut:
lsof -i :8000 # macOS / Linux netstat -ano | findstr :8000 # Windows (note the PID) - Hentikan proses itu (atau DynamoDB Lokal lama):
kill <PID> # macOS / Linux taskkill /PID <PID> /F # Windows - Atau jalankan DynamoDB Lokal di port lain dan perbarui klien Anda:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 8001 # then: endpoint = http://localhost:8001 - Docker? Ubah sisi host pemetaan (
-p 8001:8000) dan sambungkan ke8001. - Hapus plugin duplikat/stacks sehingga hanya satu proses yang mencoba mengikat port.
Di DynoTable
Setelah membebaskan port 8000 (atau memindahkan Lokal ke -port 8001), instal DynoTable
dan tambahkan profil Lokal di Pengaturan → Profil → Tambahkan Profil: atur titik akhir
http://localhost:8000 (atau port alternatif Anda), wilayah placeholder, dan
kredensial tiruan alfanumerik. Uji Koneksi memastikan emulatornya
mendengarkan sebelum Anda menelusuri tabel. Panduan:
Menjalankan DynamoDB Lokal ·
Hubungkan ke DynamoDB Lokal & LocalStack.
Saat Anda mengubah port, perbarui titik akhir profil agar cocok — profil tetap
menunjuk ke :8000 sementara Lokal mendengarkan di :8001 menghasilkan
koneksi ditolak bahkan
setelah konflik yang mengikat terselesaikan. Konverter DynamoDB JSON
membantu memuat data awal setelah Lokal dapat dijangkau.
Kesalahan terkait
- Tidak dapat memulai proses Lokal DynamoDB — emulator gagal memulai karena alasan lain (Java, lib asli).
- Tidak dapat terhubung ke DynamoDB Lokal (ECONNREFUSED) — sisi lain: tidak ada yang mendengarkan saat Anda melakukan panggilan.
- Pelajari: Menjalankan DynamoDB Lokal
Sumber
- Menyebarkan DynamoDB secara lokal di komputer Anda — Panduan Pengembang AWS DynamoDB (port default 8000; "Jika port 8000 tidak tersedia, perintah ini memunculkan pengecualian")
- Catatan penggunaan lokal DynamoDB — Panduan Pengembang AWS DynamoDB (opsi baris perintah
-portdan daftar tanda lengkap) - amazon/dynamodb-local — Docker Hub (pemetaan gambar dan port resmi)