Cum să depanați erorile „Nu se poate conecta la Daemon Docker”.
Publicat: 2022-08-14Docker este una dintre platformele de top pentru construirea și rularea containerelor software. Vine cu tot ce aveți nevoie pentru a utiliza containere fie pe o singură gazdă, fie pe mai multe noduri distribuite în modul Swarm.
Docker are o arhitectură bazată pe demoni. Software-ul care este responsabil pentru crearea și pornirea containerelor este independent de procesul CLI care acceptă comenzile dvs. Aceasta înseamnă că veți vedea erori în CLI dacă încercați să executați comenzi fără o conexiune demon activă. În acest articol, vom împărtăși câteva metode pentru depanarea acestor mesaje frustrante.
Simptomele problemei
Docker CLI se bazează pe o conexiune demon disponibilă. Interacționează cu demonul folosind apeluri API. Când demonul configurat este inaccesibil, comenzile docker
precum docker ps
, docker run
și docker build
vor afișa un mesaj de eroare similar cu acesta:
$ docker rulați hello-world:latest Nu se poate conecta la demonul Docker la unix:///var/run/docker.sock Funcționează demonul docker?
Acest lucru dezvăluie că CLI a încercat să comunice cu demonul Docker folosind socket-ul Unix /var/run/docker.sock
. Priza nu este deschisă, așa că conexiunea a eșuat.
1. Verificați că serviciul Docker Daemon rulează
Daemonul Docker este de obicei gestionat de un serviciu systemd care pornește automat Docker după repornirea gazdei. Puteți începe depanarea verificând dacă acest serviciu rulează:
$ sudo systemctl status docker docker.service - Docker Application Container Engine Încărcat: încărcat (/lib/systemd/system/docker.service; activat; prestabilit furnizor: activat) Activ: inactiv (mort)
Serviciul ar trebui să raporteze Active: active (running)
dacă demonul rulează. Exemplul de mai sus arată inactive (dead)
, ceea ce înseamnă că demonul s-a oprit.
Porniți Docker folosind următoarea comandă:
$ sudo systemctl start docker
Acum ar trebui să puteți rula cu succes comenzile docker
CLI.
Este posibil să descoperiți că Docker rămâne în starea oprită după ce reporniți aparatul. Puteți rezolva acest lucru activând serviciul, permițând systemd să-l pornească automat:
$ sudo systemctl enable docker $ sudo systemctl daemon-reload
Comanda daemon-reload
indică systemd să-și reîncarce configurația pentru a aplica modificarea.
2. Porniți manual Daemonul
Este posibil să utilizați uneori un sistem care nu are instalat serviciul Docker. Puteți porni manual demonul Docker folosind comanda dockerd
. De obicei, acesta trebuie rulat ca root
.
$ sudo dockerd INFO[2022-06-29T15:12:49.303428726+01:00] Pornire
Docker va rămâne accesibil atâta timp cât se execută comanda. Folosiți Ctrl+C pentru a opri demonul.
3. Verificarea CLI-ului vizează demonul corect
Pot apărea probleme atunci când CLI încearcă să se conecteze la o instanță demon Docker la distanță. Aceasta este de obicei cauza când mesajul de eroare arată o adresă TCP:
$ docker rulați hello-world:latest Nu se poate conecta la demonul Docker la tcp:///0.0.0.0:2375
În acest exemplu, CLI-ul docker
încearcă să contacteze demonul Docker la 0.0.0.0:2375
folosind TCP, în loc de socket-ul local Unix Docker. Acest lucru va eșua dacă suportul TCP al demonului Docker este dezactivat sau gazda specificată este inaccesibilă în rețea.
De obicei, puteți rezolva acest lucru trecând la contextul Docker CLI corect pentru conexiunea demon pe care doriți să o utilizați:
$ docker context folosește implicit
Puteți enumera toate contextele disponibile și punctele finale demon la care se conectează cu comanda context ls
:
$ context docker ls NUME DESCRIERE DOCKER ENDPOINT implicit * Configurația curentă bazată pe DOCKER_HOST unix:///var/run/docker.sock
Contextul selectat în prezent este evidențiat cu un asterisc.
Valorile neașteptate din coloana DOCKER ENDPOINT
sunt de obicei cauzate de setarea variabilei de mediu DOCKER_HOST
. Veți vedea un avertisment când acesta este cazul:
$ export DOCKER_HOST=1.2.3.4 $ context docker ls NUME DESCRIERE DOCKER ENDPOINT implicit * Configurația curentă bazată pe DOCKER_HOST tcp://1.2.3.4:2375 Avertisment: variabila de mediu DOCKER_HOST suprascrie contextul activ. Pentru a utiliza un context, fie setați indicatorul global --context, fie anulați variabila de mediu DOCKER_HOST.
Prezența variabilei de mediu DOCKER_HOST
în shell-ul dvs. suprascrie punctul final definit de contextul selectat. În acest exemplu, comenzile docker
vor viza întotdeauna instanța demonului la tcp://1.2.3.4:2375
.
Această problemă poate fi rezolvată prin ștergerea variabilei DOCKER_HOST
:
$ export DOCKER_HOST=
Docker va folosi acum punctul final configurat de contextul dvs. activ. Acesta va fi socket-ul Unix local implicit la /var/run/docker.sock
, cu excepția cazului în care ați configurat manual un context personalizat.
$ context docker ls NUME DESCRIERE DOCKER ENDPOINT implicit * Configurația curentă bazată pe DOCKER_HOST unix:///var/run/docker.sock
4. Probleme cu permisiunile
Permisiunile incorecte ale utilizatorului pe socket-ul Docker sunt o altă cauză comună a problemelor de conexiune demon. Acest tip de problemă arată de obicei un mesaj de eroare ușor diferit:
$ docker rulați hello-world:latest Am primit permisiunea refuzată în timp ce încercam să mă conectez la socket-ul demon Docker la unix:///var/run/docker.sock
Acest lucru se întâmplă atunci când contul dvs. de utilizator Unix nu are permisiunea de a interacționa cu socket-ul care expune API-ul Docker. Adăugarea în grupul docker
este cea mai bună metodă de a rezolva această problemă:
$ sudo usermod -aG docker $USER
Va trebui să deschideți o nouă fereastră shell sau să vă deconectați și să reveniți din nou pentru ca această modificare să intre în vigoare. Acum ar trebui să puteți rula comenzi docker
fără a avea probleme de permisiuni.
rezumat
„Nu se poate conecta la demonul Docker” apare atunci când CLI-ul Docker nu poate comunica cu o instanță demon Docker folosind configurația curentă. Acest lucru se datorează adesea faptului că serviciul demon Docker a fost oprit sau dezactivat. De asemenea, ați putea încerca să vă conectați la o gazdă Docker de la distanță care a dispărut offline.
Acum ar trebui să fiți conștienți de posibilele cauze ale acestei probleme și de modalitățile comune de a o rezolva. Depanați eroarea verificând setările demonului Docker, repornind serviciul Docker și asigurându-vă că contul dvs. de utilizator are permisiunea de a interacționa cu socket-ul Docker.