Jak rozwiązywać problemy z błędami „Nie można połączyć się z demonem Docker”
Opublikowany: 2022-08-14Docker to jedna z wiodących platform do budowania i uruchamiania kontenerów oprogramowania. Zawiera wszystko, czego potrzebujesz, aby używać kontenerów na jednym hoście lub wielu rozproszonych węzłach w trybie Swarm.
Docker ma architekturę opartą na demonach. Oprogramowanie odpowiedzialne za tworzenie i uruchamianie kontenerów jest niezależne od procesu CLI, który akceptuje Twoje polecenia. Oznacza to, że zobaczysz błędy w CLI, jeśli spróbujesz uruchomić polecenia bez aktywnego połączenia z demonem. W tym artykule przedstawimy kilka metod rozwiązywania tych frustrujących wiadomości.
Objawy problemu
Interfejs wiersza polecenia platformy Docker jest zależny od dostępności połączenia demona. Współdziała z demonem za pomocą wywołań API. Gdy skonfigurowany demon jest niedostępny, polecenia docker
, takie jak docker ps
, docker run
i docker build
, będą wyświetlać komunikat o błędzie podobny do tego:
$ Docker run hello-world:ostatni Nie można połączyć się z demonem Docker pod adresem unix:///var/run/docker.sock Czy działa demon dockera?
To pokazuje, że CLI próbował komunikować się z demonem Docker za pomocą gniazda Unix /var/run/docker.sock
. Gniazdo nie jest otwarte, więc połączenie nie powiodło się.
1. Sprawdź, czy usługa demona Docker działa
Demon platformy Docker jest zwykle zarządzany przez usługę systemd, która automatycznie uruchamia platformę Docker po ponownym uruchomieniu hosta. Możesz rozpocząć rozwiązywanie problemów, sprawdzając, czy ta usługa jest uruchomiona:
$ okno dokowane stanu sudo systemctl docker.service — silnik kontenera aplikacji platformy Docker Załadowane: załadowane (/lib/systemd/system/docker.service; włączone; ustawienie wstępne dostawcy: włączone) Aktywny: nieaktywny (martwy)
Usługa powinna zgłosić Active: active (running)
, jeśli demon jest uruchomiony. Powyższy przykład pokazuje inactive (dead)
, co oznacza, że demon się zatrzymał.
Uruchom Docker za pomocą następującego polecenia:
$ sudo systemctl start docker
Teraz powinieneś być w stanie pomyślnie uruchomić polecenia CLI docker
.
Może się okazać, że Docker pozostaje w stanie zatrzymania po ponownym uruchomieniu komputera. Możesz rozwiązać ten problem, włączając usługę, pozwalając systemd na automatyczne jej uruchomienie:
$ sudo systemctl włącz docker $ sudo systemctl demon-reload
Polecenie daemon-reload
nakazuje systemd ponowne załadowanie konfiguracji w celu zastosowania zmiany.
2. Uruchom demona ręcznie
Czasami możesz użyć systemu, w którym nie zainstalowano usługi Docker. Demona Dockera można uruchomić ręcznie za pomocą polecenia dockerd
. To zwykle musi być uruchomione jako root
.
$ sudo dockerd INFO[2022-06-29T15:12:49.303428726+01:00] Uruchamianie
Docker pozostanie dostępny przez cały czas działania polecenia. Użyj Ctrl+C, aby zatrzymać demona.
3. Sprawdzanie, czy CLI celuje we właściwego demona
Problemy mogą wystąpić, gdy interfejs wiersza polecenia próbuje połączyć się ze zdalną instancją demona platformy Docker. Jest to zwykle przyczyna, gdy komunikat o błędzie pokazuje adres TCP:
$ Docker run hello-world:ostatni Nie można połączyć się z demonem Docker pod adresem tcp:///0.0.0.0:2375
W tym przykładzie interfejs wiersza polecenia platformy Docker próbuje skontaktować się z demonem 0.0.0.0:2375
docker
użyciu protokołu TCP zamiast lokalnego gniazda platformy Unix Docker. To się nie powiedzie, jeśli obsługa TCP demona platformy Docker jest wyłączona lub określony host jest niedostępny w sieci.
Zwykle można rozwiązać ten problem, przełączając się na poprawny kontekst interfejsu Docker CLI dla połączenia demona, którego chcesz użyć:
$ Docker użyj domyślnego kontekstu
Możesz wyświetlić listę wszystkich dostępnych kontekstów i punktów końcowych demonów, z którymi się łączą, za pomocą context ls
:
$ kontekst docker ls NAZWA OPIS PUNKT KOŃCOWY DOKERA default * Bieżąca konfiguracja oparta na DOCKER_HOST unix:///var/run/docker.sock
Aktualnie wybrany kontekst jest wyróżniony gwiazdką.
Nieoczekiwane wartości w kolumnie DOCKER ENDPOINT
są zwykle spowodowane ustawieniem zmiennej środowiskowej DOCKER_HOST
. W takim przypadku zobaczysz ostrzeżenie:
Eksportuj DOCKER_HOST = 1.2.3.4 $ kontekst docker ls NAZWA OPIS PUNKT KOŃCOWY DOKERA domyślnie * Aktualna konfiguracja oparta na DOCKER_HOST tcp://1.2.3.4:2375 Ostrzeżenie: zmienna środowiskowa DOCKER_HOST zastępuje aktywny kontekst. Aby użyć kontekstu, ustaw globalną flagę --context lub usuń zmienną środowiskową DOCKER_HOST.
Obecność zmiennej środowiskowej DOCKER_HOST
w powłoce zastępuje punkt końcowy zdefiniowany przez wybrany kontekst. W tym przykładzie polecenia docker
zawsze będą skierowane do instancji demona pod adresem tcp://1.2.3.4:2375
.
Ten problem można rozwiązać, czyszcząc zmienną DOCKER_HOST
:
$ eksportuj DOCKER_HOST=
Docker będzie teraz używał punktu końcowego skonfigurowanego przez Twój aktywny kontekst. Będzie to domyślne lokalne gniazdo Unix w /var/run/docker.sock
, chyba że ręcznie ustawiłeś niestandardowy kontekst.
$ kontekst docker ls NAZWA OPIS PUNKT KOŃCOWY DOKERA default * Bieżąca konfiguracja oparta na DOCKER_HOST unix:///var/run/docker.sock
4. Problemy z uprawnieniami
Inną częstą przyczyną problemów z połączeniem z demonem są nieprawidłowe uprawnienia użytkownika w gnieździe platformy Docker. Ten rodzaj problemu zwykle pokazuje nieco inny komunikat o błędzie:
$ Docker run hello-world:ostatni Odmówiono pozwolenia podczas próby połączenia z gniazdem demona Docker pod adresem unix:///var/run/docker.sock
Dzieje się tak, gdy konto użytkownika systemu Unix nie ma uprawnień do interakcji z gniazdem, które udostępnia interfejs API platformy Docker. Dodanie siebie do grupy docker
jest najlepszym sposobem rozwiązania tego problemu:
$ sudo usermod -aG okno dokowane $USER
Aby ta zmiana zaczęła obowiązywać, musisz otworzyć nowe okno powłoki lub wylogować się i ponownie zalogować. Powinieneś teraz móc uruchamiać polecenia docker
bez problemów z uprawnieniami.
Streszczenie
Komunikat „Nie można połączyć się z demonem Docker” pojawia się, gdy interfejs wiersza polecenia platformy Docker nie może komunikować się z instancją demona platformy Docker przy użyciu bieżącej konfiguracji. Dzieje się tak często, ponieważ usługa demona Docker została zatrzymana lub wyłączona. Możesz również próbować połączyć się ze zdalnym hostem platformy Docker, który jest w trybie offline.
Powinieneś teraz zdawać sobie sprawę z możliwych przyczyn tego problemu i typowych sposobów jego rozwiązania. Rozwiąż problem, sprawdzając ustawienia demona platformy Docker, ponownie uruchamiając usługę Docker i upewniając się, że Twoje konto użytkownika ma uprawnienia do interakcji z gniazdem platformy Docker.