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

Configurare noua (How To)

Situatie

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.

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 run hello-world:latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
Is the docker daemon running?

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
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead)

Serviciul ar trebui să raporteze Active: activ (în rulare) dacă demonul rulează. Exemplul de mai sus arată inactiv (mort), 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 instruiește 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. Acesta trebuie de obicei rulat ca root.

$ sudo dockerd
INFO[2022-06-29T15:12:49.303428726+01:00] Starting up

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 run hello-world:latest
Cannot connect to the Docker daemon at 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 use default

Puteți enumera toate contextele disponibile și punctele finale demon la care se conectează cu comanda context ls:

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   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
$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT
default *   Current DOCKER_HOST based configuration   tcp://1.2.3.4:2375
Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.

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.

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock

4. Probleme cu permisiunile
Permisiunile incorecte ale utilizatorului pe socket-ul lui 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 run hello-world:latest
Got permission denied while trying to connect to the Docker daemon socket at 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 la 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.

Solutie

Tip solutie

Permanent

Voteaza

(2 din 4 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?