Cum să depanați erorile „Nu se poate conecta la Daemon Docker”.

Publicat: 2022-08-14

Grafic care arată sigla Docker

Docker 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.