"Could not connect to DynamoDB Local" (ECONNREFUSED): impossibile connettersi a DynamoDB Locale
TL;DR: non c'è nulla in ascolto nel luogo in cui il tuo cliente sta componendo. Conferma che DynamoDB Local sia effettivamente in esecuzione sulla porta prevista e che l'"endpoint" del tuo client punti a "http://localhost:8000" — non reale AWS.
Cosa significa
Error: connect ECONNREFUSED 127.0.0.1:8000La connessione TCP è stata rifiutata: l'emulatore non è attivo su quell'host/porta oppure il client è puntato da qualche parte e nessuno è in ascolto.
Perché succede
- DynamoDB Local non è in esecuzione: non è mai stato avviato, non si è arrestato in modo anomalo o è stato arrestato (vedere l'errore di avvio del processo).
- Porta errata: il locale è su "8000" ma il client chiama "8080" (o il contenitore mappa una porta host diversa).
- Nessun set di
endpoint— senza di esso l'SDK comunica con real AWS, non con localhost (che quindi emerge come errori di autenticazione/regione o viene rifiutato se si esegue l'override dell'host). - Rete Docker: da un altro contenitore,
localhostè quel contenitore, non l'host. Utilizza il nome del servizio/gateway host. localhostvs127.0.0.1problemi di risoluzione (IPv6::1).
Configurazioni tipiche
| Impostazione | Punto finale | Capito |
|---|---|---|
| Docker predefinito | http://localhost:8000 | Il contenitore deve pubblicare -p 8000:8000 |
| Porta personalizzata | http://localhost:8001 | Corrisponde a -port 8001 sul jar e sul client |
| Componi servizio | http://dynamodb:8000 | Da un altro contenitore — non localhost |
| Reale AWS per errore | https://dynamodb.<regione>.amazonaws.com | Rilascia "endpoint" quando intendi cloud |
Su Windows, WSL e l'host a volte non sono d'accordo su quale processo sia proprietario
localhost:8000 — se curl funziona in WSL ma Node sull'host ottiene
"ECONNREFUSED", punta esplicitamente il client host a "127.0.0.1" o esegue Local
dove viene eseguito il client.
Il Test connessione di DynoTable su un profilo locale è il controllo più veloce qualcosa risponde sull'endpoint che hai configurato: fallisce con lo stesso socket rifiutato quando Local è inattivo.
Come risolverlo
- Conferma che è in ascolto:
curl http://localhost:8000 # DynamoDB Local returns a small response lsof -i :8000 # something should own the port - Impostare esplicitamente l'endpoint sul client:
import {DynamoDBClient} from '@aws-sdk/client-dynamodb'; const client = new DynamoDBClient({ region: 'local', endpoint: 'http://localhost:8000', credentials: {accessKeyId: 'local', secretAccessKey: 'local'} }); - Abbina la porta all'emulatore effettivamente associato (e la mappatura Docker
-p host:container). - Contenitore incrociato? Utilizzare il nome del contenitore/servizio (ad esempio
http://dynamodb-local:8000) ohost.docker.internal, nonlocalhost(host.docker.internalsi risolve automaticamente in Docker Desktop; su Linux Docker Engine aggiungere--add-host host.docker.internal:host-gateway).
Workbench DynoTable
Installa DynoTable, quindi Impostazioni → Profili → Aggiungi profilo con
endpoint "http://localhost:8000". Premi ⌘P per passare al profilo Locale
una volta che curl http://localhost:8000 ha esito positivo. Il punto della credenziale dovrebbe rimanere verde
mentre Locale è attivo; se diventa rosso in caso di errori di connessione, la porta o l'endpoint sono attivi
il profilo non corrisponde a dove è in ascolto l'emulatore. Usa il
DynamoDB JSON convertitore per caricare le apparecchiature dopo
Il locale è raggiungibile.
Se curl http://localhost:8000 fallisce, l'emulatore non è in esecuzione: avvia Docker
o prima il jar (Impossibile avviare DynamoDB Processo locale).
Quando la porta è sbagliata ma qualcosa è in ascolto, potresti visualizzare un errore HTTP generico
invece di "ECONNREFUSED"; abbina l'endpoint del profilo a qualunque cosa lsof -i :8000
rapporti. Guida: Connetti a DynamoDB Locale e LocalStack.
Errori correlati
- Impossibile avviare DynamoDB Processo locale
- Regione mancante nella configurazione
- Impara: Esecuzione DynamoDB Local · Connessione a DynamoDB Local / LocalStack
Fonti
Distribuzione di DynamoDB localmente sul computer — AWS DynamoDB Guida per gli sviluppatori (porta predefinita 8000, comando di avvio, esempi di esecuzione/composizione Docker)
DynamoDB note sull'utilizzo locale - AWS DynamoDB Guida per gli sviluppatori (endpoint locale
http://localhost:8000; gli SDK richiedono una chiave di accesso + valore della regione)amazon/dynamodb-local — Docker Hub (immagine ufficiale,
docker run -p 8000:8000 amazon/dynamodb-local)docker run --add-host— Riferimento CLI Docker (host.docker.internal/host-gatewayper connessioni da contenitore a host)