Der Docker-Befehl kann keine Verbindung zum Docker-Daemon herstellen


246

Ich möchte zu Docker wechseln, also habe ich gerade angefangen, damit herumzuspielen. Ich habe Docker auf einer VirtualBox Ubuntu 15.10 (Wily Werewolf) -Installation installiert und dann, wie hier vorgeschlagen, versucht, ein einfaches Nginx Docker-Image auszuführen:

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

Also habe ich überprüft, ob Docker ausgeführt wird:

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

Dies deutet darauf hin, dass der Docker-Dämon tatsächlich bereits ausgeführt wird. Um sicherzugehen, dass ich den Docker-Dämon gerade manuell gestartet habe:

$ 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

Ich habe dann versucht, das Image erneut auszuführen, aber mit dem gleichen Ergebnis:

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

Ich habe versucht, den Befehl zu befolgen, aber ohne Erfolg. Was mache ich hier falsch?


1
gleiches Problem. Ich bin auch auf Ubuntu 15.10 :(
Daniel Loureiro

1
gleiches Problem, Ubuntu 15.10
Lucas Tettamanti

1
Starten Sie einfach Ihren Docker-Dienst neu, das ist alles. Vielen Dank an @jim <pre> Sudo Service Docker Neustart </ pre>
Nasruddin

1
Nasruddin, das hat bei mir sicher NICHT funktioniert ... :-(
Rafael_Espericueta

1
Ich musste die Maschine neu starten, damit sie funktioniert.
Romaroma

Antworten:


443

Sie müssen Ihren aktuellen Benutzer wie folgt zur Docker-Gruppe hinzufügen:

sudo usermod -aG docker $(whoami)

Melden Sie sich dann ab und wieder beim System an oder starten Sie das System neu. Test vondocker version

Weitere Informationen zur Installation der Docker-Engine finden Sie in der Docker-Dokumentation


albern, aber es hat auch bei mir funktioniert @RobinLoxley, dies sollte eine tatsächliche Antwort sein, nicht nur ein Kommentar, lass es mich wissen, wenn du es postest, ich werde dir eine positive Bewertung geben;)
benka

9
Ich würde unterstreichen "Abmelden und erneut in das System einloggen oder das System neu starten"
Michele

3
Die Antwort von @Junaid unten zeigt, wie Sie den Abmelde- / Anmeldeschritt vermeiden können, falls Sie wie ich so faul sind, dass Sie Ihre Apps nicht neu starten möchten;)
brandizzi

Dies ist genau das, was im Docker-Tutorial erwähnt wird, aber das Abmelden und erneutes Anmelden hat bei mir nicht funktioniert. Ich musste das System neu starten, damit es funktioniert.
Aalaap

4
Ich sehe Docker-Versionsinformationen, aber am Ende der Ausgabe sehe ichCannot connect to the Docker daemon. Is the docker daemon running on this host?
Ghanbari

137

Fügen Sie den Benutzer der Docker-Gruppe hinzu

  • Fügen Sie die Docker-Gruppe hinzu, falls sie noch nicht vorhanden ist:

    sudo groupadd docker

  • Fügen Sie den verbundenen Benutzer "$ {USER}" zur Docker-Gruppe hinzu:

    sudo gpasswd -a ${USER} docker

  • Starten Sie den Docker-Daemon neu:

    sudo service docker restart

  • Führen Sie entweder a aus newgrp dockeroder melden Sie sich an, um die Änderungen an Gruppen zu aktivieren.


1
Es scheint, dass dies newgrp dockerlokal für die Shell ist, nicht für die Anmeldesitzung. Dies geht aus der Manpage überhaupt nicht hervor.
Bergey

1
Hat für mich gearbeitet. Vielen Dank!
Apokai

Die einzige Antwort, die funktioniert hat! Auf einem privaten Cloud-Linux-Computer, und es hat immer noch funktioniert!
Meghna Natraj

Arbeitete unter Ubuntu 18.04! Vielen Dank
Kshitij Saraogi

33

Normalerweise führt der folgende Befehl den Trick aus:

sudo service docker restart

Dies anstelle docker startder Fälle, in denen Docker anscheinend bereits ausgeführt wird.

Wenn dies dann funktioniert, wie vorgeschlagen und in einer anderen Antwort und zu diesem GitHub-Problem , wenn Sie sich nicht zur Docker-Gruppe hinzugefügt haben, führen Sie Folgendes aus:

sudo usermod -aG docker <your-username> 

Und du bist höchstwahrscheinlich gut zu gehen.


Wie bei allen anderen, die darauf stoßen, startet das Docker eines Betriebssystems nicht direkt nach der Installation, und infolgedessen wird dasselbe can't connect to daemon messageangezeigt. In diesem Fall können Sie zunächst überprüfen, ob Docker tatsächlich nicht ausgeführt wird, indem Sie den Status Ihres Docker-Dienstes überprüfen, indem Sie Folgendes ausführen:

sudo service docker status

Wenn die Ausgabe ungefähr so ​​aussieht: docker stop/waitingStattdessen docker start/running, process 15378bedeutet dies offensichtlich, dass Docker nicht aktiv ist. Stellen Sie in diesem Fall sicher, dass Sie Folgendes beginnen:

sudo service docker start

Und nach wie vor sind Sie höchstwahrscheinlich gut zu gehen.


18

Hinweis für sich selbst: Ich erhalte den Fehler aus dem Titel der Frage, wenn ich vergesse, den dockerBefehl auszuführen mit sudo:

sudo docker run ...

[Ubuntu 15.10]


12

Hatte das gleiche Problem und was für mich funktionierte war:
Überprüfen des Besitzes von /var/run/docker.sock

ls -l /var/run/docker.sock

Wenn Sie nicht der Eigentümer sind, ändern Sie den Eigentümer mit dem Befehl

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

Dann können Sie versuchen, die Docker-Befehle problemlos auszuführen: D.


2
Nachdem ich alle anderen Möglichkeiten ausgeschöpft hatte, funktionierte es für mich unter Sabayon / Gentoo Linux.
gerrit_hoekstra

Diese Datei gehört, gehört rootaber zur dockerGruppe. Der richtige Ansatz besteht darin, Ihren aktuellen Benutzer dockergemäß der Docker-Dokumentation der Gruppe zuzuweisen :sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante

9

Nachdem Sie alles installiert und den Dienst gestartet haben, schließen Sie das Terminal und öffnen Sie es erneut. Ziehen Sie dann das Image

Bearbeiten

Ich hatte auch dieses Problem erneut. Wenn die obige Lösung nicht funktioniert, versuchen Sie diese Lösung , die der folgende Befehl ist

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

Überlegungen

Wenn der obige Befehl funktioniert, haben Sie wahrscheinlich Probleme mit dem Netzwerk-Docker. Dadurch wird das Problem jedoch behoben. Um dies zu bestätigen, lesen Sie das Protokoll mit dem folgenden Befehl

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

Wenn die Ausgabe so etwas hat

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

Sie haben wirklich Netzwerkprobleme, aber ich weiß noch nicht, ob Ihr Betriebssystem beim nächsten Neustart ( Update , 2 Monate kein Problem erneut) dieses Problem erneut bekommt und ob es sich um einen Fehler oder ein Installationsproblem handelt

Meine Docker-Version

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

Nach der Installation von Docker unter Ubuntu habe ich den folgenden Befehl ausgeführt:

sudo service docker start

Hast du es versucht?


6

Ich hatte das gleiche Problem. Ich habe zwei Tage lang darum gekämpft, es zu lösen.

Es hat nur funktioniert, als ich:

  1. Laut Docker-Tutorial müssen Sie den Docker-Schlüssel hinzufügen, falls er nicht bereits hinzugefügt wurde, indem Sie:

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

  2. Stellen Sie dann sicher, dass Sie sich Docker-Berechtigungen gewähren, indem Sie:

    $ sudo usermod -aG docker $USER

Hoffe das hilft dir auch.


2
Schritt 2 kann vereinfacht werden als:sudo usermod -aG docker $USER
johntellsall

5

Geben Sie als root ( sudo su) ein und versuchen Sie Folgendes:

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

Ich habe hier das gleiche Problem, und der Docker-Befehl funktionierte nur als Root und auch damit DOCKER_HOST leeren

PS: Achten Sie auch darauf, dass die korrekte und offizielle Art der Installation unter Ubuntu darin besteht, die entsprechenden Repositorys (auch am 15.10.) Zu verwenden, nicht mit diesem " wget " -Ding.


Dieses "Wget" -Ding hat einfach das Docker-Repository in Ihre passende Quelle eingefügt ... dh dasselbe, was Sie manuell auf "korrekte und offizielle Weise" tun müssen ...
Alar

1
Ich fürchte, du liegst falsch, Alar. Die "wget" -Methode fügt ein Docker-Repository in Ihre apt-Quelle ein, was gut ist, aber sie führt auch viele andere schlechte Dinge aus, z. B. das Setzen einer DOCKER_HOST-Umgebungsvariable, die verhindert, dass Docker sofort ausgeführt wird. Ist nicht, weil beide Methoden Docker zum Repo hinzufügen, dass sie beide gleich sind.
Daniel Loureiro

5

Für OSX :

Nachdem Sie Docker geöffnet und den 'Standard'-Computer über das Schnellstart-Terminal ( https://docs.docker.com/engine/installation/mac/ ) gestartet haben, versuchen Sie Docker-Befehle und erhalten die Meldung "Verbindung zum Docker-Daemon kann nicht hergestellt werden" , es stellt sich heraus , Sie einige env Variablen festlegen müssen :

eval "$(docker-machine env default)"

Dann probieren Sie es aus, um docker run hello-worldzu sehen, ob alles pfirsichfarben ist.


5

Für diejenigen, die bereits versucht haben, Ihren Computer neu zu starten, deaktivieren Sie die Umgebungsvariable DOCKER_HOST, wie in der Docker-Env-Dokumentation angegeben, und alle anderen versuchen einfach, mit dem zu arbeiten

sudo service docker restart

Nur das hat mir auch nach dem Neustart der Maschine geholfen.


2
Dies ist erforderlich, wenn Sie sich nur abmelden und anmelden.
Zhang LongQI

4

Zugriff ohne Rootberechtigung - vom Docker aus

Fügen Sie die Docker-Gruppe hinzu, falls sie noch nicht vorhanden ist.

$ sudo groupadd docker

Fügen Sie den verbundenen Benutzer "$ {USER}" zur Docker-Gruppe hinzu.

Ändern Sie den Benutzernamen entsprechend Ihrem bevorzugten Benutzer.

Möglicherweise müssen Sie sich abmelden und erneut anmelden, damit dies wirksam wird.

$ sudo gpasswd -a ${USER} docker

Starten Sie den Docker-Daemon neu.

$ sudo service docker restart

3

Diese Frage ist derzeit die Nummer 3 in einer Google-Suche. Nachdem ich einige Nachforschungen angestellt hatte, um dieses Problem auf meinem Linux-System zu lösen, dachte ich, ich würde diese Antwort schreiben. Der ursprüngliche Beitrag besagt, dass das Problem unter Ubuntu liegt, aber ich habe das Problem auch mit Fedora festgestellt. In diesem Sinne habe ich Folgendes getan, um das Problem zu beheben.

Auf Fedora 22

Docker installieren:

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

Nach der Installation von Docker:

Ein Benutzer muss zur Docker-Gruppe hinzugefügt werden.

$> sudo usermod -aG docker

Der Docker-Daemon muss gestartet werden

$> sudo service docker start

Sie können den Daemon so einstellen, dass er beim Booten startet

$> sudo chkconfig docker on

Sie können überprüfen, ob der Docker-Dienst ausgeführt wird

$> service docker status

Und noch eine letzte Überprüfung

$> docker run hello-world

Auf Fedora 23 kann diese Gruppe aufgerufen werden dockerroot. Außerdem möchten Sie es wahrscheinlich aus dem Repository installieren (anstatt curl ... | sh), damit es später aktualisiert werden kann:dnf install docker
basic6

Viele haben keine Gruppe "Docker", daher müssen wir sie zuerst groupadd dockerhinzufügen und dann zu Ihrem Benutzernamen hinzufügensudo usermod -aG docker your_username
TonyTony

2

Versuchen Sie, "sudo" mit dem Befehl zu verwenden, den Sie ausführen.


"Ich habe versucht, den Befehl zu sudo'en, aber ohne Erfolg. Weiß jemand, was ich hier falsch mache? Alle Tipps sind willkommen!"
RhinoDevel

2

Ich habe das gleiche Problem beim Ausführen von Docker.

Sie können Befehle als Sudo- Benutzer ausführen :

sudo docker ***your command here***

2

Für Ubuntu:
Ist mir passiert, als ich Docker aktualisiert habe.
Sie müssen den Dienst und den Socket demaskieren und dann den Dienst neu starten.

Folgendes hat bei mir funktioniert:

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

Was hinter den Kulissen passiert ist
systemd hat auch die Möglichkeit, eine Einheit automatisch oder manuell als vollständig nicht startbar zu markieren, indem sie mit / dev / null verknüpft wird. Dies wird als Maskieren der Einheit bezeichnet und ist mit dem Befehl mask möglich.

sudo systemctl mask docker.service

Sie können die Liste der maskierten Dienste überprüfen, indem Sie:

sudo systemctl list-unit-files

Ausgabe von sudo systemctl list-unit-files

Um den automatischen / manuellen Start des Dienstes zu aktivieren, müssen Sie ihn entlarven, indem Sie:

sudo sytemctl unmask docker.service

Jetzt wird der Dienst wie unten gezeigt aktiviert Geben Sie hier die Bildbeschreibung ein


1

Da Docker beim Start an einen Unix-Socket bindet, der root gehört, funktioniert die Verwendung von 'sudo' zusammen mit den Docker-Befehlen.


1
  1. Ich hatte auch das gleiche Problem. Das Problem lag in Sockets, die Docker-Daemon und Docker-Client zugewiesen waren.
  2. Erstens wurde für den Docker-Client auf docker.sock keine Berechtigung festgelegt. Sie können sie mit "sudo usermod -aG docker $ USER" festlegen.
  3. Überprüfen Sie dann Ihre Bash-Datei, in der der Docker-Client ausgeführt wird. Für mich war sie auf 0.0.0.0:2375, während der Docker-Daemon auf einem Unix-Socket ausgeführt wurde (in der Konfigurationsdatei von Dockerd festgelegt).
  4. Kommentieren Sie einfach die Bash-Line und es wird gut funktionieren.
  5. Wenn Sie jedoch möchten, dass es auf dem TCP-Port anstelle des Unix-Sockets funktioniert, ändern Sie die Konfigurationsdatei von dockerd und setzen Sie sie auf 0.0.0.0.2375. 2375.

1

Vielleicht hilft dies jemandem, da die Fehlermeldung äußerst wenig hilfreich ist und ich alle Standard-Berechtigungsschritte mehrere Male ohne Erfolg durchlaufen habe.

Docker belässt gelegentlich Geisterumgebungsvariablen, die den Zugriff blockieren, obwohl Ihr System ansonsten korrekt eingerichtet ist. Die folgenden Shell-Befehle machen es möglicherweise wieder zugänglich, wenn Sie es zu einem bestimmten Zeitpunkt ausgeführt haben und es nach einem Neustart nicht mehr zusammenarbeitet:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

Ich hatte eine zuvor funktionierende Docker-Installation und nach dem Neustart meines Laptops weigerte er sich einfach zu funktionieren. Korrekt zu der Gruppe Docker Benutzer hinzugefügt wurde, auf dem Sockel die richtigen Berechtigungen hatte, etc, konnte aber noch nicht ausgeführt docker login, docker run ...etc. Diese regelte es für mich. Leider muss ich dies bei jedem Neustart ausführen. Dies wird bei einigen Github-Problemen auch als Problemumgehung erwähnt , obwohl es wie ein Fehler erscheint, dass dies ein dauerhaftes Hindernis für den korrekten Betrieb von Docker darstellt (Hinweis: Ich bin unter Arch Linux, nicht unter OSX, aber dies war das gleiche Problem für mich).


1

Getestet in 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

Ich habe den gleichen Fehler auf der Amazon EC2-Instanz festgestellt. Das Problem wurde nach dem Neustart der Instanz behoben.


0

Aktuellen Benutzer zur Docker-Gruppe hinzufügen:

sudo usermod -aG docker $(whoami)


Bitte formatieren Sie dies als Code! Und erkläre diesen Befehl. Und verwenden Sie die langen (beginnenden --) Versionen von Optionen.
Buhtz

0

Für Ubuntu 16.04

/lib/systemd/system/docker.serviceÄnderung der Datei :

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

mit:

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

/etc/init.d/dockerÄnderung der Datei :

DOCKER_OPTS=

mit:

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

und starten Sie dann Ihren Computer neu.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.