Polecenie Docker nie może połączyć się z demonem Docker


246

Chcę przeprowadzić się do Dockera, więc zacząłem się z tym bawić. Zainstalowałem Docker na instalacji VirtualBox Ubuntu 15.10 (Wily Werewolf) i zgodnie z sugestią tutaj próbowałem uruchomić podstawowy obraz Docker nginx :

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Sprawdziłem więc, czy Docker działa:

$ sudo service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           └─7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

To sugeruje, że demon Dockera faktycznie już działa, ale dla pewności właśnie uruchomiłem demona Dockera ręcznie:

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0

Następnie spróbowałem ponownie uruchomić obraz, ale z tym samym rezultatem:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Próbowałem sudo'ować polecenie, ale bezskutecznie. Co ja tu robię źle?


1
taki sam problem. Też jestem na Ubuntu 15.10 :(
Daniel Loureiro,

1
ten sam problem, ubuntu 15.10
Lucas Tettamanti

1
Po prostu uruchom ponownie usługę dokowania, to wszystko. Dzięki @jim <pre> restart dokera usługi sudo </pre>
Nasruddin

1
Nasruddin, to na pewno NIE działało dla mnie ... :-(
Rafael_Espericueta

1
Musiałem ponownie uruchomić maszynę, aby działała.
romaroma,

Odpowiedzi:


443

Musisz dodać bieżącego użytkownika do grupy dokerów w następujący sposób:

sudo usermod -aG docker $(whoami)

następnie wyloguj się i zaloguj ponownie do systemu lub uruchom ponownie system. test przezdocker version

Aby uzyskać więcej informacji na temat instalacji silnika dokera, postępuj zgodnie z dokumentacją dokera


głupie, ale dla mnie też zadziałało @RobinLoxley, to powinna być faktyczna odpowiedź, a nie tylko komentarz, daj mi znać, jeśli go opublikujesz, dam ci głos;)
benka

9
Chciałbym podkreślić „wyloguj się i zaloguj ponownie do systemu lub uruchom ponownie system”
Michele,

3
@Junaid poniżej odpowiedź pokazuje, jak uniknąć kroku wylogowania / logowania, jeśli jesteś tak leniwy, że nie chcesz ponownie uruchamiać aplikacji;)
brandizzi

Dokładnie o tym wspomniano w samouczku Docker, ale wylogowanie i ponowne zalogowanie nie zadziałało. Musiałem zrestartować system, aby działał.
aalaap

4
Widzę informacje o wersji Cannot connect to the Docker daemon. Is the docker daemon running on this host?
dokera

137

Dodaj użytkownika do grupy dokerów

  • Dodaj grupę dokerów, jeśli jeszcze nie istnieje:

    sudo groupadd docker

  • Dodaj podłączonego użytkownika „$ {USER}” do grupy dokerów:

    sudo gpasswd -a ${USER} docker

  • Uruchom ponownie demona Docker:

    sudo service docker restart

  • Wykonaj a newgrp dockerlub wyloguj się / zaloguj, aby aktywować zmiany w grupach.


1
Wygląda na newgrp dockerto, że jest lokalny dla powłoki, a nie sesji logowania. Nie jest to wcale jasne ze strony podręcznika.
bergey

1
Pracował dla mnie. Dzięki!
Apokai

Jedyna odpowiedź, która zadziałała! Na prywatnej maszynie z chmurą Linux i nadal działała!
Meghna Natraj

Pracował na Ubuntu 18.04! Dzięki
Kshitij Saraogi,

33

Zwykle podstęp wykonuje następujące polecenie:

sudo service docker restart

To zamiast docker startprzypadków, w których Docker wydaje się już działać.

Jeśli to zadziała, to zgodnie z sugestią i inną odpowiedzią oraz w sprawie GitHub , jeśli nie dodałeś się do grupy dokerów, zrób to, uruchamiając:

sudo usermod -aG docker <your-username> 

I najprawdopodobniej dobrze jest iść.


Tak jak w przypadku innych osób wpadających na to, w oknie dokowanym niektórych systemów operacyjnych nie uruchamia się bezpośrednio po ich zainstalowaniu, w wyniku czego can't connect to daemon messagepojawia się to samo . W takim przypadku możesz najpierw sprawdzić, czy Docker rzeczywiście nie działa, sprawdzając status usługi dokowania, wykonując:

sudo service docker status

Jeśli dane wyjściowe wyglądają mniej więcej tak: docker stop/waitingzamiast docker start/running, process 15378tego oznacza to oczywiście, że Docker nie jest aktywny. W takim przypadku upewnij się, że zaczynasz od:

sudo service docker start

I, jak poprzednio, najprawdopodobniej będziesz dobrze iść.


18

uwaga do siebie: otrzymuję błąd z tytułu pytania, gdy zapomnę uruchomić dockerpolecenie z sudo:

sudo docker run ...

[Ubuntu 15.10]


12

Miałem ten sam problem i działało dla mnie:
Sprawdzanie własności /var/run/docker.sock

ls -l /var/run/docker.sock

Jeśli nie jesteś właścicielem, zmień własność za pomocą polecenia

sudo chown *your-username* /var/run/docker.sock

Następnie możesz bezproblemowo wykonać polecenia dokera: D


2
Po wyczerpaniu wszystkich innych możliwości, to właśnie sprawiło, że działało dla mnie na Sabayon / Gentoo Linux.
gerrit_hoekstra 20.04.17

Ten plik jest własnością, rootale w dockergrupie. Prawidłowe podejście polega na przypisaniu bieżącego użytkownika do dockergrupy, zgodnie z dokumentacją Dockera:sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante

9

Po zainstalowaniu wszystkiego i uruchomieniu usługi spróbuj zamknąć terminal i otwórz go ponownie, a następnie spróbuj pobrać obraz

Edytować

Znowu miałem ten problem , jeśli powyższe rozwiązanie nie zadziała, wypróbuj to rozwiązanie, które jest poniżej

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

Uwagi

Jeśli powyższe polecenie działa, prawdopodobnie masz problemy z dokerem sieciowym, to i tak to rozwiązuje, aby to potwierdzić, zobacz dziennik z poniższym poleceniem

tail -5f /var/log/upstart/docker.log

Jeśli dane wyjściowe mają coś takiego

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up

Naprawdę masz problemy z siecią, jednak nie wiem jeszcze, czy przy następnym uruchomieniu ( aktualizacja , 2 miesiące bez problemu ponownie) Twój system operacyjny ponownie dostanie ten problem i czy jest to błąd lub problem z instalacją

Moja wersja dokera

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

8

Po zainstalowaniu dokera w systemie Ubuntu uruchomiłem następujące polecenie:

sudo service docker start

Próbowałeś tego?


6

Miałem ten sam problem. Przez dwa dni walczyłem o rozwiązanie tego problemu.

Działało tylko wtedy, gdy:

  1. Zgodnie z samouczkiem Dockera musisz dodać klucz Docker, jeśli nie został jeszcze dodany przy użyciu:

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. Następnie upewnij się, że przyznajesz sobie uprawnienia dokera, używając:

    $ sudo usermod -aG docker $USER

Mam nadzieję, że to również pomoże.


2
Krok 2 można uprościć:sudo usermod -aG docker $USER
johntellsall

5

wpisz jako root ( sudo su) i spróbuj tego:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

Mam tutaj ten sam problem, a polecenie dokera działało tylko jako root, a także z tym DOCKER_HOSTpustym

PS: strzeż się również, że poprawnym i oficjalnym sposobem instalacji na Ubuntu jest korzystanie z ich apt apt (nawet 15.10), a nie z tym „ wget ”.


ta „wget” po prostu umieści repozytorium dokera w twoim źródle apt… tzn. to samo, co musisz zrobić ręcznie w „prawidłowy i oficjalny sposób” ....
Alar

1
Obawiam się, że się mylisz, Alar. Metoda „wget” doda repozytorium dokera w twoim źródle apt, co jest dobre, ale zrobi również wiele innych złych rzeczy, takich jak ustawianie zmiennej env DOCKER_HOST, co uniemożliwi uruchamianie okna dokowanego. Nie dlatego, że obie metody dodają okno dokowane do repozytorium, ponieważ oba są takie same.
Daniel Loureiro,

5

W przypadku OSX :

Po otwarciu okna dokowanego i uruchomieniu „domyślnej” maszyny za pomocą Quickstart Terminal ( https://docs.docker.com/engine/installation/mac/ ) wypróbowujesz polecenia dokera i pojawia się komunikat „Nie można połączyć się z demonem dokera” , okazuje się, że potrzebujesz kilku zmiennych env :

eval "$(docker-machine env default)"

Następnie wypróbuj to, docker run hello-worldaby sprawdzić, czy wszystko jest brzoskwiniowe.


5

Dla tych, którzy już próbowali zrestartować komputer, rozbrojenie zmiennej środowiskowej DOCKER_HOST, jak opisano w dokumentacji env dokera, a cała reszta po prostu spróbuje użyć

sudo service docker restart

Tylko to załatwiło sprawę nawet po ponownym uruchomieniu komputera.


2
Jest to wymagane, jeśli wylogowujesz się i logujesz.
Zhang LongQI

4

Udzielanie dostępu użytkownika innego niż root - z okna dokowanego

Dodaj grupę dokerów, jeśli jeszcze nie istnieje.

$ sudo groupadd docker

Dodaj podłączonego użytkownika „$ {USER}” do grupy dokerów.

Zmień nazwę użytkownika, aby pasowała do preferowanego użytkownika.

Może być konieczne wylogowanie się i ponowne zalogowanie, aby to zadziałało.

$ sudo gpasswd -a ${USER} docker

Uruchom ponownie demona Docker.

$ sudo service docker restart

3

To pytanie jest obecnie numerem 3 w wyszukiwarce Google. Po przeprowadzeniu badań nad rozwiązaniem tego problemu na moim systemie Linux pomyślałem, że napiszę tę odpowiedź. Oryginalny post mówi, że problem dotyczy Ubuntu, ale ja również doświadczyłem problemu przy użyciu Fedory. Mając to na uwadze, oto, co zrobiłem, aby rozwiązać problem.

W Fedorze 22

Instalowanie Dockera:

$> curl -fsSL https://get.docker.com/ | sh

Po zainstalowaniu Dockera:

Użytkownik musi zostać dodany do grupy dokerów.

$> sudo usermod -aG docker

Demon dokera musi zostać uruchomiony

$> sudo service docker start

Możesz ustawić demona, aby uruchamiał się przy starcie systemu

$> sudo chkconfig docker on

Możesz sprawdzić, czy usługa dokowania jest uruchomiona

$> service docker status

I ostatnia kontrola końcowa

$> docker run hello-world

W Fedorze 23 ta grupa może zostać wywołana dockerroot. Ponadto prawdopodobnie chcesz go zainstalować z repozytorium (zamiast curl ... | sh), aby można go było później zaktualizować:dnf install docker
basic6

wielu nie ma „dokera” grupy, więc najpierw musimy go dodać, groupadd dockera następnie dodać do nazwy użytkownikasudo usermod -aG docker your_username
TonyTony

2

Spróbuj użyć „sudo” z uruchomionym poleceniem.


„Próbowałem sudo'ować polecenie, ale bezskutecznie. Czy ktoś wie, co robię tutaj źle? Wszystkie wskazówki są mile widziane!”
RhinoDevel

2

Mam ten sam problem podczas uruchamiania dokera.

możesz uruchamiać polecenia jako użytkownik sudo :

sudo docker ***your command here***

2

W przypadku systemu Ubuntu:
Zdarzyło mi się, gdy zaktualizowałem dokera.
Musisz zdemaskować usługę i gniazdo, a następnie ponownie uruchomić usługę.

Dla mnie działało:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

To, co dzieje się za kulisami
systemu, ma również możliwość oznaczenia jednostki jako całkowicie niemożliwej do uruchomienia, automatycznie lub ręcznie, poprzez połączenie jej z / dev / null. Nazywa się to maskowaniem jednostki i jest możliwe dzięki poleceniu maskowania.

sudo systemctl mask docker.service

Możesz sprawdzić listę zamaskowanych usług, używając:

sudo systemctl list-unit-files

Wyjście sudo systemctl list-unit-files

Aby włączyć automatyczne / ręczne uruchomienie usługi, należy ją zdemaskować za pomocą:

sudo sytemctl unmask docker.service

Teraz usługa zostanie włączona, jak pokazano poniżej wprowadź opis zdjęcia tutaj


1

Ponieważ okno dokowane łączy się z gniazdem unix, którego właścicielem jest root podczas uruchamiania, będzie działać „sudo” wraz z poleceniami dokera.


1
  1. Też miałem ten sam problem. Problem tkwił w gniazdach przypisanych do demona-dokera i klienta-dokera.
  2. Po pierwsze, nie ustawiono uprawnień dla klienta-dokera na docker.sock. Można to ustawić za pomocą „sudo usermod -aG docker $ USER”
  3. Następnie sprawdź plik bash, w którym działa klient-doker, Dla mnie był on w wersji 0.0.0.0:2375, podczas gdy demon-doker działał na gnieździe unixowym (został ustawiony w pliku konfiguracyjnym dockerd).
  4. Po prostu skomentuj linię bash, a będzie działać dobrze.
  5. Ale jeśli chcesz, aby działał na porcie TCP zamiast na gnieździe unixowym, zmień plik konfiguracyjny dockerd i ustaw go na 0.0.0.0.2375 i trzymaj linię w bash tak, jak jest, lub ustaw na 0.0.0.0: 2375.

1

Być może to pomoże komuś, ponieważ komunikat o błędzie jest bardzo nieprzydatny, a ja wiele razy przeszedłem wszystkie standardowe kroki zezwolenia, ale bezskutecznie.

Docker od czasu do czasu pozostawia zmienne środowiskowe-duchy, które blokują dostęp, pomimo tego, że Twój system byłby poprawnie skonfigurowany. Następujące polecenia powłoki mogą uczynić go ponownie dostępnym, jeśli miałeś go w jednym momencie i po prostu przestał współpracować po ponownym uruchomieniu:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

Miałem wcześniej działającą instalację dokera, a po ponownym uruchomieniu laptopa po prostu odmówił pracy. Został poprawnie dodany do grupy użytkowników doker, miał odpowiednie uprawnienia na gnieździe, etc, ale nadal może nie działać docker login, docker run ...itp to ustalone to dla mnie. Niestety muszę to uruchamiać przy każdym ponownym uruchomieniu. Jest to wspomniane w kilku problemach z githubem również jako obejście, chociaż wydaje się, że jest to błąd, że jest to trwała bariera dla poprawnego działania Dockera (uwaga: korzystam z Arch Linux, nie OSX, ale był to ten sam problem dla mnie).


1

Testowane w Ubuntu 16.04

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart

0

Napotkałem ten sam błąd w instancji Amazon EC2. Problem został naprawiony po ponownym uruchomieniu instancji.


0

Dodaj bieżącego użytkownika do grupy dokerów:

sudo usermod -aG docker $(whoami)


Sformatuj to jako kod! I wyjaśnij to polecenie. I użyj długich (zaczynających się --) wersji opcji.
buhtz

0

Dla Ubuntu 16.04

/lib/systemd/system/docker.serviceZmiana pliku wewnątrz :

ExecStart=/usr/bin/dockerd fd://

z:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

/etc/init.d/dockerZmiana pliku wewnątrz :

DOCKER_OPTS=

z:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

a następnie uruchom ponownie komputer.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.