Docker-Compose kann keine Verbindung zum Docker Daemon herstellen

111

Ich erhalte die Fehlermeldung, dass ich keine Verbindung zum Docker-Daemon herstellen kann. Ich habe mir die Antworten anderer Leute angesehen, die ähnliche Probleme hatten, aber es hat nicht geholfen. Ich verwende die Version von Ubuntu 15.10. Ich werde versuchen, alle Informationen bereitzustellen, die ich habe.

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Docker-Version

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Docker-Compose-Version

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

Dies passiert, wenn ich versuche, den Dienst zu stoppen oder zu starten ...

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

Wenn ich renne ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

Jede Hilfe wäre sehr dankbar. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Daveskylark
quelle
1
Bitte zerstören Sie Ihre Beiträge nicht. Sobald Sie eine Frage gestellt haben, haben Sie den Inhalt an die gesamte Stack Overflow-Community lizenziert (unter der CC-by-SA-Lizenz). Wenn Sie diesen Beitrag von Ihrem Konto trennen möchten, lesen Sie Was ist der richtige Weg für eine Aufhebungsanfrage? .
Bugs

Antworten:

265

Nach 15 Minuten Debugging hatte ich den gleichen Fehler. Es stellt sich heraus, dass alles, was es braucht, ein sudo:) Schauen Sie sich [Erstellen einer Docker-Gruppe] hier https://docs.docker.com/engine/installation/linux/ubuntulinux/ an, um das sudo-Präfix zu entfernen.

Mahmoud Zalt
quelle
34
Sie brauchen einen besseren Fehler = / Diese Frage hat 13.000 Aufrufe
Jonathan
4
Mann, Sie haben ungefähr 30 Stunden nur für diejenigen gespart, die abgestimmt haben, und wahrscheinlich ist es nur 1% der Zeit, die Sie tatsächlich gespart haben
vak
5
Die eigentliche Lösung besteht darin, die Docker-Gruppe zu erstellen, während dies sudomeiner Meinung nach nur eine Problemumgehung / ein Hack ist. Da der Teil, der eine Gruppe erstellt, hier nicht erklärt wird, nur ein Link angegeben wird und der Inhalt dieses Links geändert wurde, halte ich dies für eine Nur-Link-Antwort und er ist jetzt im Wesentlichen nutzlos (für den eigentlichen Fix-Teil). Könnten Sie vielleicht die Beschreibung hinzufügen, wie diese Gruppe hinzugefügt wird?
Hoijui
2
Ich denke, das sudoist auch eine schlechte Idee. Informationen zum Verwalten von Docker als Nicht-Root-Benutzer finden Sie in den Docker-Dokumenten: docs.docker.com/engine/installation/linux/linux-postinstall/…
jwhitlock
6
Grundsätzlich ist alles, was Sie tun müssen sudo usermod -aG docker $USER, und es wird danach funktionieren.
user2340939
62

Ich hatte dieses Problem und wollte die Dinge nicht durcheinander bringen sudo. Bei der Untersuchung habe ich versucht, einige Informationen zu erhalten:

docker info

Überraschenderweise hatte ich folgenden Fehler:

Beim Versuch, eine Verbindung zum Docker-Daemon-Socket unter Unix herzustellen, wurde die Berechtigung verweigert: ///var/run/docker.sock: http: ///var/run/docker.sock/v1.38/info : Wählen Sie unix / var /run/docker.sock: connect: Berechtigung verweigert

Aus irgendeinem Grund hatte ich nicht genügend Berechtigungen. Der folgende Befehl löste mein Problem:

sudo chown $USER /var/run/docker.sock

Et voilà!

Madjaoue
quelle
Wie wäre es nach einem erneuten Neustart von Docker? Müssen wir das nochmal machen?
Light.G
Nein, es sollte funktionieren, wenn Sie Docker neu starten. Ich bin mir jedoch nicht sicher, was passiert, wenn Sie Ihren Computer neu starten.
Madjaoue
Standardmäßig wird Docker standardmäßig docker.sockmit einer Nicht-Root-Gruppe gehalten docker. Aber wir könnten das durch -GFlag während der Initiierung des Docker-Dämons ändern . In meinem Fall füge ich eine Gruppe für hinzu $USERNAME, dh Docker-Gruppe hinzufügen und dann meinen Computer neu starten (Ubuntu 16.04, PC). Es funktioniert gut. Und dies wird in Docker-Dokumenten empfohlen.
Light.G
3
Funktioniert auch für mich :)
Kamil J.
26

Es scheint, dass Ihr Problem durch einen alten Docker-Fehler verursacht wurde, bei dem die Socket-Datei nach dem Absturz von Docker nicht neu erstellt wurde. Wenn dies das Problem ist, sollte das Umbenennen der Socket-Datei das erneute Erstellen ermöglichen:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

Da dieser Fehler behoben ist, erhalten die meisten Benutzer den Fehler Couldn't connect to Docker daemonwahrscheinlich, weil sie nicht zur dockerGruppe gehören und keine Berechtigung zum Lesen dieser Datei haben. Laufen mit sudo docker ...wird das beheben, ist aber keine gute Lösung.

Docker kann als Nicht-Root-Benutzer ausgeführt werden (ohne sudo ) ausgeführt werden, der über die entsprechenden Gruppenberechtigungen verfügt. Die Linux-Dokumente nach der Installation enthalten die Details. Die Kurzversion:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

Dadurch können Benutzer in der dockerGruppe ausgeführt dockerund docker-composeBefehle ohne ausgeführt werden sudo. Docker selbst führt einen Root aus, der einige Angriffe zulässt. Sie müssen also immer noch vorsichtig sein, welche Container Sie ausführen. Siehe Docker-SicherheitsdokumentationWeitere Informationen finden .

jwhitlock
quelle
Diese Frage ist spezifisch für die Linux-Installation, und der Fix beinhaltet Änderungen auf dem Linux-Hostsystem, um ihn zu beheben. Sie erhalten bessere Informationen, wenn Sie eine ähnliche Frage mit demselben Detail, jedoch für Windows, veröffentlichen. Um sich selbst zu lösen, empfehle ich eine
genaue
9

Ich hatte das gleiche Problem. Nachdem ich mir Notizen gemacht und einige Debugging-Ergebnisse analysiert hatte, löste ich schließlich den gleichen Fehler. Starten Sie zuerst den Dienst,

service docker start

Vergessen Sie nicht, Ihren Benutzer in die Docker-Gruppe aufzunehmen.

RA
quelle
Ich habe als root ausgeführt, als ich auf diesen Fehler gestoßen bin. Es schien sudo, als hätte ich es für andere repariert. Ich bin froh festzustellen, dass ich es tatsächlich vergessen habe. So einfach!
Will
8

Sie sollten Ihren Benutzer der "Docker" -Gruppe mit folgenden Elementen hinzufügen:

sudo usermod -aG docker $ {USER}

zhiiker
quelle
5

Ich habe diesen Fehler erhalten, wenn sich Dateien im DockerfileVerzeichnis befanden, auf die der aktuelle Benutzer nicht zugreifen konnte. dockerkonnte daher nicht den vollständigen Kontext auf den Dämon hochladen und brachte die Meldung " Konnte keine Verbindung zum Docker-Dämon unter http + docker: // localunixsocket herstellen ".

cweiske
quelle
2
Vielen Dank! Das hat es für mich gelöst. Einfach zu überprüfen, da alle Docker-Befehle funktionierten, Docker-Compose jedoch nicht. Auch Docker-Compose funktionierte in einem anderen Verzeichnis. Sehr irreführende Fehlermeldung, übrigens.
Csongor Fagyal
1
Dies sollte wirklich höher sein
Arlen Anderson
1
Vielen Dank! arbeitete für mich. Die Verwendung docker build .führt zu Berechtigungsproblemen.
Jedermann
Das einzige, was funktioniert hat - warum sind Docker-Fehlermeldungen so schlecht? Vielen Dank!
coderMe
4

Eine Möglichkeit, dies zu beheben, besteht darin, zuerst Ihren Benutzer zur dockerGruppe hinzuzufügen, indem Sie Folgendes ausführen

sudo usermod -aG docker $USER

WICHTIG: Denken Sie daran, sich von Ihrem System (nicht nur von Ihrem Terminal) abzumelden und wieder anzumelden, damit dies wirksam wird!

arunavkonwar
quelle
sudo usermod -aG docker $ {USER} Wir sollten uns auch abmelden und anmelden, um Änderungen zu übernehmen: su - $ {USER}
user3785966
3

Aus der Ausgabe von "ps aux | grep docker" geht hervor, dass der Docker-Daemon nicht ausgeführt wird. Verwenden Sie die folgenden Methoden, um festzustellen, was falsch ist und warum Docker nicht gestartet wird

  1. Überprüfen Sie die Docker-Protokolle

$ sudo tail -f /var/log/upstart/docker.log

  1. Versuchen Sie, Docker im Debug-Modus zu starten

$ sudo docker -d -D

Manish R.
quelle
2

In meinem Fall wird Ihr Docker-Dienst möglicherweise gestoppt

Befehl zum Starten des Docker-Dienstes:

$ sudo systemctl start docker

Befehl zum Überprüfen, ob es gestartet wird:

$ sudo docker run hello-world

John_J
quelle
2

Ein weiterer Grund, warum dieser Fehler auftreten kann: Für mich war es eine fehlerhafte Bildpfaddefinition in docker-compose.yml:

  service:
    image: ${CONTAINER_REGISTRY_BASE}/my-service
   ...

Sieht zuerst gut aus, aber ich hatte mich auf die Umgebung CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/eingestellt. Anscheinend hat der //im Bildpfad diesen Fehler verursacht.

docker-compose: v.1.21.2
docker: 18.03.1-ce
leberknecht
quelle
2

versuche es einfach mit sudo. Es scheint ein Erlaubnisproblem zu sein!

sudo docker-compose -f docker-compose-deps.yml up -d

es hat bei mir funktioniert.

Demobilizer
quelle
1

Ich habe Ubuntu 16.04 verwendet und dieses Problem auch gefunden, als ich Docker-Compose verwendet habe. Ich habe es behoben, indem ich diesen Befehl ausgeführt habe.

$ sudo systemctl start docker
$ sudo docker-compose build
Khachornchit Songsaen
quelle
1

Gibt es eine geringe Möglichkeit, dass Sie den Standardcomputer gelöscht haben? Überprüfen Sie jedoch zuerst, ob alle Dateien vorhanden sind (OSX, ähnlich auf anderen Systemen).

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

Installieren Sie auch die Docker App, da die Wartung von Containern viel einfacher ist:

brew cask reinstall docker

Ans Starten Sie die Docker-App vom Finder aus (warten Sie, bis der Dienst vollständig gestartet ist).

Überprüfen Sie dann die Installation mit:

docker-machine ls

Wenn in der Liste keine Maschinen vorhanden sind, erstellen Sie eine und starten Sie sie:

docker-machine create default
docker-machine start default

Danach sollten Build, Compose und alle anderen Befehle ordnungsgemäß funktionieren.

Raubvogel
quelle
1

in meinem Fall liegt es an der Ubuntu-Erlaubnis,

  1. Listenpunkt

Erlaubnis prüfen von

docker info 

Wenn sie die Problemberechtigung drucken, Geben Sie hier die Bildbeschreibung ein verwenden Sie

sudo chmod -R 777 /var/run/docker.sock
Joe-Khoa
quelle
0

Für mich war das Update eine neuere Version (1.24) von Installation docker-composemit diesem Artikel .

Die vorherige Version (1.17) wurde aus ubuntudem Standard-Repository installiert, aber nach der Installation einer neueren Version konnte ich den Container starten. Hoffe es hilft jemandem.

Artyom Ilyin
quelle
0

Ich denke, es liegt am Zugangsrecht, man muss nur schreiben

sudo docker-compose-deps.yml up
Moustapha Berrou
quelle
-1

In meinem Fall habe ich den gleichen Fehler, wenn ich es versuche docker-compose build und meine Lösung wurde einfach hinzugefügtsudo

sudo docker-compose build
Andrey Suglobov
quelle
-2

Ich fand das und es schien mein Problem zu beheben.

GitHub Fix Docker Daemon Crash

Ich habe den Inhalt meiner Datei docker-compose-deps.yml wie im Link gezeigt geändert. Dann rannte ich docker-compose -f docker-compose-deps.yml up -d. Dann habe ich es wieder geändert und es hat aus irgendeinem Grund funktioniert. Ich musste die Schritte in dem von mir bereitgestellten Link nicht fortsetzen, aber die ersten beiden Schritte haben das Problem für mich behoben.

Daveskylark
quelle
2
Ubuntu 16.04: einfach hinzufügen sudo: sudo docker-compose up -d
Moccine
Es ist nicht genug als Antwort. Wenn Sie Ihre eigene Antwort akzeptieren möchten, müssen Sie den eigentlichen Grund Ihres Problems angeben. Andernfalls wäre es für andere wirklich irreführend. Übrigens gibt es hier andere Antworten, haben sie geholfen? Da habe ich keine Kommentare von dir gesehen.
Light.G