Tidak dapat terhubung ke DynamoDB Lokal (ECONNREFUSED) — "Could not connect to DynamoDB Local"

TL;DR — Tidak ada yang mendengarkan saat klien Anda melakukan panggilan. Konfirmasikan DynamoDB Lokal benar-benar berjalan pada port yang Anda harapkan, dan endpoint klien Anda mengarah ke http://localhost:8000 — bukan AWS asli.

Apa artinya

Error: connect ECONNREFUSED 127.0.0.1:8000

Mengapa itu terjadi

  • DynamoDB Lokal tidak berjalan — tidak pernah dimulai, mogok, atau dimatikan (lihat kesalahan proses awal).
  • Port salah — Lokal ada di 8000 tetapi klien memanggil 8080 (atau kontainer memetakan port host yang berbeda).
  • Tidak ada set endpoint — tanpanya, SDK akan berkomunikasi dengan real AWS, bukan localhost (yang kemudian muncul sebagai kesalahan auth/region, atau ditolak jika Anda mengganti host).
  • Jaringan Docker — dari container lain, localhost adalah container tersebut, bukan hostnya. Gunakan nama layanan/gateway host.
  • kekhasan resolusi localhost vs 127.0.0.1 (IPv6 ::1).

Pengaturan umum

PengaturanTitik akhirMengerti
bawaan buruh pelabuhanhttp://localhost:8000Penampung harus mempublikasikan -p 8000:8000
Pelabuhan khusushttp://localhost:8001Cocokkan -port 8001 pada toples dan klien
Layanan penulisanhttp://dynamodb:8000Dari wadah lain — bukan localhost
AWS asli karena kesalahanhttps://dynamodb.<region>.amazonaws.comJatuhkan endpoint saat yang Anda maksud adalah cloud

Di Windows, WSL dan host terkadang tidak sepakat mengenai proses mana yang dimiliki localhost:8000 — jika curl berfungsi di WSL tetapi Node di host dapat melakukannya ECONNREFUSED, arahkan klien host ke 127.0.0.1 secara eksplisit atau jalankan Lokal tempat klien berjalan.

Uji Koneksi DynoTable pada profil Lokal adalah pemeriksaan tercepat sesuatu menjawab pada titik akhir yang Anda konfigurasikan — gagal dengan hal yang sama menolak soket ketika Lokal sedang down.

Bagaimana cara memperbaikinya

  1. Konfirmasi bahwa ia mendengarkan:
    curl http://localhost:8000        # DynamoDB Local returns a small response
    lsof -i :8000                     # something should own the port
  2. Setel titik akhir secara eksplisit pada klien:
    import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
    const client = new DynamoDBClient({
      region: 'local',
      endpoint: 'http://localhost:8000',
      credentials: {accessKeyId: 'local', secretAccessKey: 'local'}
    });
  3. Cocokkan port dengan emulator yang sebenarnya terikat (dan pemetaan Docker -p host:container).
  4. Lintas kontainer? Gunakan nama container/service (misalnya http://dynamodb-local:8000) atau host.docker.internal, bukan localhost (host.docker.internal terselesaikan secara otomatis di Docker Desktop; di Linux Docker Engine tambahkan --add-host host.docker.internal:host-gateway).

Workbench DynoTable

Instal DynoTable, lalu Pengaturan → Profil → Tambahkan Profil dengan titik akhir http://localhost:8000. Tekan ⌘P untuk beralih ke profil Lokal setelah curl http://localhost:8000 berhasil. Titik kredensial harus tetap hijau saat Lokal aktif; jika berubah menjadi merah karena kesalahan koneksi, port atau titik akhir masuk profilnya tidak cocok dengan tempat emulator mendengarkan. Gunakan Konverter DynamoDB JSON untuk memuat perlengkapan setelahnya Lokal dapat dijangkau.

Jika curl http://localhost:8000 gagal, emulator tidak berjalan — mulai Docker atau toplesnya terlebih dahulu (Tidak dapat memulai proses Lokal DynamoDB). Ketika port salah tetapi ada sesuatu yang mendengarkan, Anda mungkin melihat kesalahan HTTP umum bukannya ECONNREFUSED; cocokkan titik akhir profil dengan lsof -i :8000 apa pun laporan. Panduan: Hubungkan ke DynamoDB Lokal & LocalStack.

Kesalahan terkait

Sumber

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.