Kaip ištaisyti Redis prisijungimo prie 127.0.0.1:6379 klaidą

Trumpas atsakymas: jei jūsų programa praneša Could not connect to Redis at 127.0.0.1:6379: Connection refused, pirmiausia patikrinkite, ar Redis serveris iš tikrųjų klausosi tame adrese ir prievade. Redis CLI pagal nutylėjimą naudoja 127.0.0.1 ir prievadą 6379, todėl atmetimas dažniausiai rodo sustabdytą serverį, kitą prievadą, konteinerio ar virtualios mašinos tinklo neatitikimą arba klausiklio konfigūracijos problemą. Autentifikacijos klaidos yra kitokios: jos paprastai kyla jau užmezgus TCP ryšį.

Greičiausia diagnostika yra redis-cli -h 127.0.0.1 -p 6379 PING. Jei grąžinama PONG, Redis yra pasiekiamas, ir vietoj aklai perkraunamo Redis serverio turėtumėte patikrinti savo programos Redis URL, prisijungimo duomenis, TLS nustatymus arba ryšių baseino konfigūraciją. Redis dokumentuose PING specifikuojamas kaip būdas patikrinti, ar ryšys yra gyvas, ir ar serveris gali aptarnauti duomenis. Žiūrėkite oficialią Redis PING komandos dokumentaciją.

Greitos diagnostikos lentelė

Ką matoteLabiausiai tikėtina sritis tikrinimuiPirmas veiksmas
Connection refusedNėra klausiklio tiksliniame hoste/prievade, neteisingas galinis taškas arba konteinerio tinklo neatitikimasVykdykite redis-cli -h 127.0.0.1 -p 6379 PING
PONG Redis CLI, bet programa vis tiek nepavykstaProgramos konfigūracijaPalyginkite programos hostą, prievadą, duomenų bazę, TLS, vartotojo vardą ir slaptažodį su veikiančiu CLI ryšiu
NOAUTH arba WRONGPASSAutentifikacija arba ACLNaudokite teisingą Redis vartotojo vardą/slaptažodį; nelaikykite to prievado klausymo problema
TLS arba sertifikato klaidaProtokolo neatitikimasNaudokite TLS nustatymus ir rediss://, kai serveris reikalauja šifruotų ryšių
Veikia hoste, bet ne konteineryjeDocker tinklasNenaudokite 127.0.0.1, nebent Redis yra tame pačiame konteineryje; naudokite teisingą tarnybos arba hosto adresą

1. Atkartokite nesėkmę ne programoje

Prieš keisdami programos kodą, naudokite Redis CLI. Oficialioje Redis CLI dokumentacijoje nurodoma, kad pagal nutylėjimą redis-cli jungiasi prie 127.0.0.1:6379. Galite aiškiai nurodyti tikslą:

redis-cli -h 127.0.0.1 -p 6379 PING

Sėkmingai veikiantis vietinis serveris turėtų atsakyti:

PONG

Jei gaunate tą pačią ryšio atmetimo žinutę, problemą atkūrėte perdavimo lygmenyje. Tai naudinga, nes pašalina jūsų karkasą, ORM, talpyklos biblioteką ir programos kodą iš tiesioginio tyrimo. Redis CLI taip pat priima -h hostui ir -p prievadui, kaip aprašyta Redis CLI nuorodoje.

PowerShell pavyzdys, rodantis redis-cli jungiantįsi prie 127.0.0.1 prievade 6379 ir gaunantį Connection refused klaidą
Pavyzdinis terminalo vaizdas pirmajai diagnostikai: aiškus Redis CLI PING į 127.0.0.1:6379 patvirtina, kad atmetimas nėra ribotas tik programos kodui.

Jei PING jau grąžina PONG, pereikite prie 5 žingsnio. Neperkraukite sveiko Redis egzemplioriaus; sutelkite dėmesį į programos ryšio eilutę ir vykdymo aplinką.

2. Įsitikinkite, kad Redis serveris veikia

Linux sistemoje, įdiegtoje per paketų tvarkyklę, Redis dažniausiai galima valdyti kaip sistemos tarnybą. Redis Linux diegimo dokumentuose rodomi systemctl start ir systemctl stop, nurodant, kad tarnybos pavadinimas gali būti redis arba redis-server, priklausomai nuo platformos. Tipiškas Ubuntu/Debian patikrinimas yra:

sudo systemctl status redis-server
sudo systemctl start redis-server
sudo systemctl status redis-server

Jei jūsų distribucija naudoja redis kaip tarnybos pavadinimą, pakeiskite jį tuo pavadinimu. Jei systemd nevaldo jūsų Redis proceso, naudokite paleidimo metodą, atitinkantį būdą, kuriuo įdiegėte Redis, o ne darykite prielaidą, kad tarnyba egzistuoja. Dabartinė Redis Linux gairė yra prieinama oficialioje Linux diegimo dokumentacijoje.

Ubuntu terminalo pavyzdys tikrinantis redis-server su systemctl, paleidžiantis tarnybą ir rodantis ją kaip aktyvią ir veikiančią
Ubuntu/Debian systemd pavyzdys: patikrinkite Redis tarnybą, paleiskite ją, jei neaktyvi, ir įsitikinkite, kad tarnyba praneša apie aktyvų veikimo būseną.

Windows ir WSL pastaba

Nedarykite prielaidos, kad egzistuoja natyvi Windows Redis tarnyba vien todėl, kad jūsų programa veikia Windows. Dabartinis Redis diegimo apžvalgos sąrašas Windows įtraukia į Docker kelią, o Redis taip pat palaiko Windows gaires WSL ir jo Windows suderinamumo partneriui. Jei Redis veikia WSL viduje, pirmiausia jį išbandykite toje pačioje WSL aplinkoje. Jei Redis veikia Docker Desktop, naudokite Docker patikrinimus kitame skyriuje. Žiūrėkite dabartinę Redis Open Source diegimo apžvalgą ir Redis Windows/WSL diegimo dokumentaciją.

3. Patikrinkite prievadą 6379 ir sutvarkykite Docker tinklą

Redis paprastai naudoja TCP prievadą 6379. Jei Redis veikia, bet niekas neklauso tame prievade, patikrinkite, ar serveris nebuvo paleistas su kita konfigūracija. Linux sistemoje greitas operacinės sistemos patikrinimas, pvz., ss -ltnp, gali parodyti klausiančius TCP lizdus; Windows sistemoje PowerShell Test-NetConnection 127.0.0.1 -Port 6379 gali padėti atskirti klausiantį prievadą nuo atmesto. Tačiau lemiamas testas lieka veikianti Redis komanda, tokia kaip PING.

Jei Redis veikia Docker, o programa – hoste

Konteinerio prievadas turi būti paskelbtas hostui. Redis Docker dokumentuose rodomas hosto ir konteinerio prievado 6379 atvaizdavimas. Vietiniam kūrimui galite susieti paskelbtą prievadą su hosto kilpos (loopback) adresu:

docker run -d --name redis -p 127.0.0.1:6379:6379 redis
docker ps

Docker prievadų paskelbimo dokumentacija aiškina, kad nurodžius 127.0.0.1, paskelbtas prievadas tampa pasiekiamas tik iš Docker hosto, kas yra saugiau vietinei kūrimo talpyklai nei skelbiant jį visuose sąsajos. Oficialūs Redis Docker greito paleidimo ir ryšio pavyzdžiai yra Run Redis Open Source on Docker, o hosto adreso elgsena aprašyta Docker prievadų paskelbimo dokumentacijoje.

Docker terminalo pavyzdys paleidžiantis Redis konteinerį su hosto prievadu 6379, susietu su konteinerio prievadu 6379, ir tikrinantis atvaizdavimą su docker ps
Docker pavyzdys hosto programoms: paskelbkite konteinerio prievadą 6379 į 127.0.0.1:6379, tada patvirtinkite atvaizdavimą su docker ps prieš testuodami Redis.

Jei jūsų programa taip pat veikia Docker

Tai dažnas painiavos šaltinis. Konteineryje 127.0.0.1 reiškia patį tą konteinerį. Jei Redis yra atskira Compose tarnyba, prisijunkite prie Redis tarnybos pavadinimo, pvz., redis:6379, bendrame Compose tinkle, o ne 127.0.0.1:6379. Docker dokumentuose nurodoma, kad Compose tarnybos numatytajame tinkle yra aptinkamos pagal tarnybos pavadinimą Compose tinklo vadove.

Jei programa yra Docker Desktop konteineryje, bet Redis veikia tiesiogiai hoste, Docker rekomenduoja specialų hostname host.docker.internal, norint pasiekti hosto tarnybas. Toks elgesys dokumentuotas Docker Desktop tinklo DUK.

4. Patikrinkite redis.conf: bind, apsaugos režimas ir prievadas

Jei procesas veikia, bet klauso neteisingos sąsajos ar prievado, apžiūrėkite konfigūracijos failą, kurį aktyvus Redis procesas iš tikrųjų naudoja. Šiai klaidai svarbiausi trys nustatymai:

bind 127.0.0.1 -::1
protected-mode yes
port 6379

Oficiali Redis konfigūracijos šablono versija naudoja kilpos (loopback) susiejimui vietinei prieigai, pagal nutylėjimą įjungia apsaugos režimą ir nustato įprastą TCP prievadą 6379. Joje taip pat dokumentuojama, kad port 0 išjungia ne-TLS TCP klausiklį. Dabartinį šabloną galite apžiūrėti oficialiame Redis repozitorijoje.

Redis konfigūracijos pavyzdys, rodantis kilpos (loopback) susiejimo adresus, protected-mode yes, port 6379 ir sėkmingą redis-cli PING grąžinantį PONG
Vietinės kūrimo konfigūracijos pavyzdys: Redis klauso kilpos (loopback) prievade 6379 su įjungtu apsaugos režimu, po kurio seka sėkmingas PING, grąžinantis PONG.

Vietinės kūrimo aplinkoje, kai naudojamas tas pats hostas, kilpos (loopback) susiejimas yra tinkamas. Legitimiam nuotoliniam arba kelių hostų diegimui, nespręskite ryšio problemų lengvai keisdami bind į visas sąsajas ir išjungdami protected-mode. Redis perspėja prieš atidarydama savo TCP prievadą nepatikimiems tinklams. Vietoj to naudokite tinkamą tinklo sąsają, ugniasienės politiką ir Redis autentifikaciją arba ACL. Peržiūrėkite oficialias Redis saugumo gaires prieš plėsdami tinklo prieigą.

Po konfigūracijos pakeitimo, perkraukite Redis naudodami tą patį tarnybų tvarkyklę, konteinerio komandą arba proceso prižiūrėtoją, kuris valdo veikiančią instanciją. Tada pakartokite:

redis-cli -h 127.0.0.1 -p 6379 PING

5. Jei Redis atsako, sutvarkykite programos ryšio nustatymus

Kai Redis CLI grąžina PONG iš tos pačios vykdymo aplinkos kaip ir jūsų programa, pradinė ryšio atmetimo problema nebėra Redis klausiklio problema. Palyginkite programos nustatymus su sėkmingu testu. Patikrinkite visas šias reikšmes:

  • Hosto pavadinimas arba IP adresas
  • TCP prievadas
  • Duomenų bazės numeris, jei jūsų programa pasirenka ne numatytąją duomenų bazę
  • Vartotojo vardas ir slaptažodis, kai įjungta ACL autentifikacija
  • Ar ryšys naudoja paprastą Redis ar TLS
  • Ar programa veikia hoste, WSL, konteineryje ar kitoje mašinoje

Vietinis, ne-TLS URL dažnai atrodo taip:

redis://127.0.0.1:6379/0

Redis CLI taip pat palaiko Redis URI ir dokumentuoja rediss:// TLS. Jei serveris reikalauja autentifikacijos, naudokite tinkamą vartotojo vardą ir slaptažodį. CLI testavimui Redis rekomenduoja REDISCLI_AUTH aplinkos kintamąjį vietoj slaptažodio tiesiogiai komandinėje eilutėje. Žiūrėkite Redis CLI ryšio parinktis.

Nesupainiokite autentifikacijos ir TLS nesėkmių su ryšio atmetimu

Jei žinutė pasikeičia iš Connection refused į NOAUTH, WRONGPASS arba ACL klaidą, tai yra pažanga: klientas pasiekė Redis serverį ir dabar jam reikia galiojančių prisijungimo duomenų. Redis rekomenduoja ACL pagrįstą autentifikaciją moderniems diegimams; oficiali Redis ACL dokumentacija paaiškina modelį.

Taip pat, jei galinis taškas reikalauja TLS, paprastas TCP Redis klientas gali nepavykti protokolo nustatymo metu, nors prievadas yra pasiekiamas. Redis CLI palaiko --tls, o Redis URI naudoja rediss schemą TLS ryšiams. Serverio pusės TLS detalėms žiūrėkite Redis TLS dokumentaciją.

Aplinkai specifiniai ryšio tikslai

Kur veikia RedisKur veikia programaTipinis tikslasSvarbi sąlyga
Tas pats hostasTas pats hostas127.0.0.1:6379Redis turi klausyti kilpos (loopback) prievade 6379
Docker konteinerisHosto OS127.0.0.1:6379Paskelbkite konteinerio prievadą hostui
Docker Compose tarnybaKita tarnyba tame pačiame Compose projekteredis:6379 arba jūsų faktinis tarnybos pavadinimasAbi tarnybos turi dalintis atitinkamu Docker tinklu
Hosto OSDocker Desktop konteinerishost.docker.internal:6379Redis turi priimti ryšį iš Docker hosto kelio
Nuotolinis serverisKita mašinaPasiekiamas Redis serverio hosto pavadinimas/IP ir sukonfigūruotas prievadasTinklo politika, bind nustatymai, autentifikacija ir galbūt TLS turi leisti prieigą

Greitas sąrašas

  • Vykdykite redis-cli -h 127.0.0.1 -p 6379 PING.
  • Jei atmesta, patvirtinkite, kad Redis procesas arba tarnyba veikia.
  • Patvirtinkite, kad Redis iš tikrųjų klauso prievade 6379, arba atnaujinkite klientą į sukonfigūruotą prievadą.
  • Jei naudojate Docker, patikrinkite prievado atvaizdavimą ir ar klientas yra hoste, ar kitame konteineryje.
  • Jei abi tarnybos yra Compose, naudokite Redis tarnybos pavadinimą vietoj 127.0.0.1.
  • Patikrinkite aktyvų redis.conf dėl bind, protected-mode ir port.
  • Laikykite Redis nuo viešojo interneto; neišjunkite saugumo nustatymų vien tam, kad klaida dingtų.
  • Kai PING veikia, pereikite prie programos prisijungimo duomenų, TLS, URL, duomenų bazės numerio ir aplinkai specifinio tinklo.

Kas dažniausiai išsprendžia šią klaidą?

Kūrėjo mašinoje dažniausiai sėkmingas kelias yra paprastas: paleiskite Redis, įsitikinkite, kad jis klauso galinio taško, kurį jūsų programa iš tikrųjų naudoja, ir tada patvirtinkite su PING. Docker pakeičia „localhost“ reikšmę, todėl konteinerizuotoms programoms dažnai reikia tarnybos pavadinimo arba host.docker.internal vietoj 127.0.0.1. Konfigūracijos pakeitimai turėtų būti paskutinė priemonė, o ne pirmoji.

Svarbi diagnostinė riba yra tai, ar gali būti užmegztas TCP ryšys. Atmetimas reiškia, kad klientas nepasiekė naudojamą Redis klausiklio prašomame galiniame taške. Redis klaida, tokia kaip NOAUTH, reiškia, kad pasiekė. Šių dviejų atvejų skirtingas traktavimas padeda išvengti nereikalingų konfigūracijos pakeitimų ir greičiau rasti tikrąją priežastį.

Palikti komentarą

Kaip ištaisyti klaidą „Prisma Client has not been generated yet“

Kaip ištaisyti klaidą „Prisma Client has not been generated yet“

Ištaisykite „Prisma Client“ nesugeneravimo klaidą patikrinę generatorių, schemą, išvesties kelią, importus, versijas, monorepo sąranką ir diegimo kūrimo veiksmus.

Kaip išspręsti SSL sertifikato problemą: „Unable to Get Local Issuer Certificate“ Git

Kaip išspręsti SSL sertifikato problemą: „Unable to Get Local Issuer Certificate“ Git

Ištaisykite Git klaidą „unable to get local issuer certificate“ nustatydami pasitikėjimo šaltinį, įdiegdami tinkamą CA grandinę ir palikdami įjungtą SSL patikrą.

Kaip išspręsti MongoDB tinklo laiko limito klaidą Mongoose jungtyje

Kaip išspręsti MongoDB tinklo laiko limito klaidą Mongoose jungtyje

Ištaisykite MongoDB tinklo laiko limito klaidas Mongoose nustatydami laiko limito tipą, patikrindami Atlas arba TCP pasiekiamumą, koreguodami URI ir tikslindami laiko limitus tik tada, kai tai pagrįsta.

Kaip išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell

Kaip išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell

Ištaisykite PowerShell vykdymo politikos „Restricted“ klaidą patikrindami sritį ir grupės politiką, tada pasirinkdami RemoteSigned, Unblock-File arba laikiną sesijos parinktį.

Kaip išspręsti npm ERR! code ERESOLVE peer dependency konfliktą

Kaip išspręsti npm ERR! code ERESOLVE peer dependency konfliktą

Ištaisykite npm ERESOLVE peer dependency konfliktus nustatydami nesuderinamą paketo diapazoną, suderindami versijas, naudodami komandas npm explain ir npm ls, bei laikydami legacy-peer-deps arba force tik kontroliuojamais atsarginiais variantais.

Kaip ištaisyti Redis prisijungimo prie 127.0.0.1:6379 klaidą

Kaip ištaisyti Redis prisijungimo prie 127.0.0.1:6379 klaidą

Ištaisykite Redis prisijungimo atmetimo klaidas adresu 127.0.0.1:6379 tikrindami serverį, prievadą, Docker tinklą, redis.conf, autentifikaciją ir TLS.

Kaip ištaisyti vidinę 500 klaidą Next.js Server Components

Kaip ištaisyti vidinę 500 klaidą Next.js Server Components

Ištaisykite Next.js Server Component 500 klaidas stebėdami serverio žurnalus, tikrindami duomenų gavimą ir aplinkos kintamuosius, apdorodami klaidas ir patikrindami gamybinį sukūrimą.

Kaip išspręsti Kubernetes CrashLoopBackOff klaidą vietiniame Minikube

Kaip išspręsti Kubernetes CrashLoopBackOff klaidą vietiniame Minikube

Diagnozuokite ir ištaisykite Kubernetes CrashLoopBackOff klaidą vietiniame Minikube tikrindami pod būseną, ankstesnius žurnalus, išėjimo priežastis, zondas, konfigūraciją, atminties apribojimus ir klasterio sveikatą.

Kaip išspręsti „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11

Kaip išspręsti „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11

Ištaisykite „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11 tikrindami Docker būseną, atnaujindami ir paleisdami iš naujo WSL 2, tikrindami virtualizaciją bei naudodami diagnostiką prieš atstatymą.

Kaip ištaisyti klaidą „Uncaught ReferenceError: process is not defined“ naudojant Vite

Kaip ištaisyti klaidą „Uncaught ReferenceError: process is not defined“ naudojant Vite

Ištaisykite Vite klaidą „process is not defined“ pakeisdami Node stiliaus process.env naudojimą, teisingai sukonfigūruodami VITE_ kintamuosius ir patikrindami priklausomybes.