Es kann keine Verbindung zum Docker von Docker-Compose hergestellt werden

163

Ich habe Docker-Machine 0.1.0 und Docker-Compose 1.1.0 unter Mac OS 10.8.5 installiert.
Docker-Maschine läuft normal und kann über Docker-Maschine ssh verbinden.

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376   

Es kann jedoch keine Verbindung von Docker-Compose hergestellt werden.

$ docker-compose up

Konnte keine Verbindung zum Docker-Daemon unter http + unix: //var/run/docker.sock herstellen - läuft er?

Wenn es sich an einem nicht standardmäßigen Speicherort befindet, geben Sie die URL mit der Umgebungsvariablen DOCKER_HOST an.

Meine Dockerfile und docker-compose.yml ist hier.

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376

docker-compose.yml

web:
  build: .

Warum kann keine Verbindung hergestellt werden? Irgendwelche Ideen?

DIGITALSQUAD
quelle
49
Läuft docker-machineals root? Ich bin gerade mit dem gleichen Problem unter Ubuntu hierher gekommen und es waren die Berechtigungen für den Socket - sudohabe den Trick gemacht.
SLD
7
Für Linux-Benutzer müssen Sie möglicherweise nur zur Docker-Gruppe hinzugefügt werden .
Batandwa
5
lauf einfach: sudo docker-compose up
Girish Gupta
Ich hatte das gleiche Problem. Sie müssen Docker neu starten. sudo service docker restartoder sudo service docker startich habe es damit gelöst.
OM Bharatiya
Wenn Sie Ubuntu verwenden, sollten Sie sudo verwenden und der Docker-Gruppe keine Benutzer hinzufügen . Zeigen Sie
kas

Antworten:

89

Der Docker-Computer wird ausgeführt. Sie müssen jedoch eine Umgebung exportieren, um eine Verbindung zum Docker-Computer herzustellen. Standardmäßig versucht der dockerCLI-Client, mit dem Dämon zu kommunizieren http+unix://var/run/docker.sock(wie in der Fehlermeldung gezeigt).

Exportieren Sie die richtigen Umgebungsvariablen mit eval $(docker-machine env dev)und versuchen Sie es erneut. Sie können auch einfach ausführen docker-machine env dev, um die zu exportierenden Umgebungsvariablen anzuzeigen. Beachten Sie, dass einer von ihnen ist DOCKER_HOST, genau wie die Fehlermeldung andeutet, dass Sie möglicherweise festlegen müssen.

Andy Shinn
quelle
2
Sie können diesen Befehl ( eval "$(docker-machine env default)") in Ihre Bin / Postaktivierung einfügen, um sicherzustellen, dass er immer auf dem neuesten Stand ist.
Dannid
1
Wo finde ich die Datei bin / postactivate?
Lukas Schulze
Oder Sie haben vergessen, Docker zu installieren: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS
224

Einfache Lösung für mich: sudo docker-compose up


UPDATE 2016-3-14: Irgendwann im Docker-Installationsprozess (oder Docker-Compose?) Gibt es einen Vorschlag und ein Beispiel, um Ihren Benutzernamen zur Gruppe "Docker" hinzuzufügen. Auf diese Weise können Sie vermeiden, dass "sudo" vor allen Docker-Befehlen benötigt wird.

~ > docker run -it ubuntu /bin/bash
root@665d1ea76b8d:/# date
Mon Mar 14 23:43:36 UTC 2016
root@665d1ea76b8d:/# exit
exit
~ > 

Schauen Sie sich die Ausgabe der Installationsbefehle (sowohl Docker als auch die 2. Installation für Docker-Compose) genau an und Sie werden den notwendigen Schritt finden. Es ist auch hier dokumentiert: https://subosito.com/posts/docker-tips/

Sudo? Nein!

Sind Sie es leid, jedes Mal, wenn Sie einen Befehl erteilen, sudo docker einzugeben? Ja, es gibt einen Weg, damit umzugehen. Obwohl Docker natürlich einen Root-Benutzer benötigt, können wir eine Root-äquivalente Gruppe für Docker-Operationen angeben.

Sie können eine Gruppe namens Docker erstellen und dann den gewünschten Benutzer zu dieser Gruppe hinzufügen. Nach dem Neustart des Docker-Dienstes muss der Benutzer nicht jedes Mal sudo eingeben, wenn Docker-Vorgänge ausgeführt werden. Wie sieht es bei Shell-Befehlen aus? als Wurzel, los geht's:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 

Getan!

UPDATE 2017-3-9

Die Installationsanweisungen für Docker wurden hier aktualisiert.

Schritte nach der Installation für Linux

Dieser Abschnitt enthält optionale Verfahren zum Konfigurieren von Linux-Hosts für eine bessere Zusammenarbeit mit Docker.

Verwalten Sie Docker als Nicht-Root-Benutzer

Der Docker-Daemon wird anstelle eines TCP-Ports an einen Unix-Socket gebunden. Standardmäßig gehört dieser Unix-Socket dem Benutzer root, und andere Benutzer können nur mit sudo darauf zugreifen. Der Docker-Daemon wird immer als Root-Benutzer ausgeführt.

Wenn Sie sudo nicht verwenden möchten, wenn Sie den Docker-Befehl verwenden, erstellen Sie eine Unix-Gruppe namens Docker und fügen Sie Benutzer hinzu. Wenn der Docker-Daemon gestartet wird, wird der Besitz des Unix-Sockets von der Docker-Gruppe gelesen / beschrieben.

So erstellen Sie die Docker-Gruppe und fügen Ihren Benutzer hinzu:

# 1. Create the docker group.
$ sudo groupadd docker

# 2. Add your user to the docker group.
$ sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without sudo.
$ docker run hello-world

Dieser Befehl lädt ein Testbild herunter und führt es in einem Container aus. Wenn der Container ausgeführt wird, wird eine Informationsnachricht gedruckt und beendet.

Alan Thompson
quelle
1
Ebenso ist
Sudo
12
Anstatt sich abzumelden ... können Sie Befehl verwenden:newgrp docker
Thiago Falcao
Ahh detaillierte Antwort mit Unterfrage :-)
Sukumaar
1
Betreff: "Einfache Lösung für mich: sudo docker-compose up". Wenn ich das versuche, bekomme ich:sudo: docker-compose: command not found
mblakesley
37

Wenn Sie Docker mit gestartet haben sudo, sollten Sie Docker-Compose mit sudo Like ausführen :sudo docker-compose up

Rohan Seth
quelle
Er arbeitete für mich , wenn ich lief sudo docker-compose buildstatt docker-compose build.
anms_pro
26

Standardmäßig wird der Docker-Daemon immer als Root-Benutzer ausgeführt. Daher müssen Sie sudoIhren Docker- Befehlen vorangestellt werden .

Wenn Sie sudo nicht verwenden möchten, wenn Sie den Docker-Befehl verwenden, erstellen Sie eine Unix-Gruppe namens Docker und fügen Sie Benutzer hinzu. Wenn der Docker-Daemon gestartet wird, wird der Besitz des Unix-Sockets von der Docker-Gruppe gelesen / beschrieben.

So erstellen Sie die Docker-Gruppe und fügen Ihren Benutzer hinzu:

  1. Erstellen Sie die Docker-Gruppe.

    $ sudo groupadd docker

  2. Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu.

    $ sudo usermod -aG docker $USER

  3. Melden Sie sich ab und wieder an, damit Ihre Gruppenmitgliedschaft neu bewertet wird.

  4. Stellen Sie sicher, dass Sie Docker-Befehle ohne sudo ausführen können.

    $ docker run hello-world

Dieser Befehl lädt ein Testbild herunter und führt es in einem Container aus. Wenn der Container ausgeführt wird, wird eine Informationsnachricht gedruckt und beendet.

Die oben beschriebenen Schritte stammen aus der offiziellen Docker-Dokumentation .

ndequeker
quelle
Wie können wir dies unter Windows installierten Docker tun?
Jeff Cook
Außerdem habe ich das Problem behoben, indem ich den Benutzer docker-composeals Eigentümer von ausgeführt /usr/local/bin/docker-composeund dann den Dienst neu gestartet habe
Sam,
groupDie Mitgliedschaft kann mit aktualisiert werden su - $USER, um das Abmelden und Anmelden zu sparen
Stuart Cardall
19

Wenn Sie einen Fehler erhalten :

FEHLER: Es konnte keine Verbindung zum Docker-Daemon unter http + docker: // localhost hergestellt werden - läuft er?

Die Lösung wäre:

  1. Stellen Sie zunächst sicher, dass der Docker-Dienst auf Ihrem Remote- / lokalen Computer wie erwartet ausgeführt wird:sudo service docker status

    Wenn nicht - ausführen sudo service docker start oder sudo systemctl start docker(abhängig von einigen Linux-Versionen, siehe Docker- Anweisungen zum Starten ).

  2. Zweitens starten Sie Docker als Sudo sudo docker-compose up

avivamg
quelle
16

sudo systemctl start docker - um den Docker-Dienst zu starten.

sudo docker-compose up nachdem.

Ich habe Fedora 26 und versuche, das gleiche Problem zu lösen, das ich schließlich auf der Fedora-Entwicklerseite in Docker Compose und dann auf der Fedora-Entwicklerseite in Docker Compose eingegeben habe , was mir geholfen hat.

Wahrscheinlich hat der Docker-Service von der Community in Betracht gezogen, mit dem System zu beginnen und die ganze Zeit im Hintergrund zu laufen, aber für mich war das nicht so offensichtlich, und das ist der Grund, warum ich mir vorstellen kann, warum es keine populäre Antwort wie diese gibt.

Auf der Fedora-Entwicklerseite finden Sie Anweisungen, wie Docker mit dem System gestartet werden kann:

sudo systemctl enable docker

Aleksei Alefirov
quelle
Ersetzen Sie systemctldurch, launchctlwenn Sie auf einem Mac laufen.
Rohit Swami
6

Wenn Sie unter Linux arbeiten, haben Sie möglicherweise keine docker-machineInstallation durchgeführt, da diese standardmäßig nur auf Windows- und Mac-Computern installiert ist.

In diesem Fall müssen Sie https://docs.docker.com/machine/install-machine/ aufrufen , um Anweisungen zur Installation auf Ihrer Linux-Version zu erhalten.

docker-compose upVersuchen Sie nach der Installation erneut, die Ausführung durchzuführen, bevor Sie die oben aufgeführten Schritte ausführen .

Hoffe das hilft jemandem. Dies funktionierte für meine Devilbox-Installation in Fedora 25.

specialk1st
quelle
5

Neben dem Hinzufügen von Benutzern zur Docker-Gruppe sudokönnen Sie auch einen Alias ​​für dockerBefehle wie den folgenden erstellen , um wiederholte Wiederholungen zu vermeiden :

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"
Shanu Gupta
quelle
4

Wenn Sie eine Docker-Maschine verwenden, müssen Sie die Umgebung mit der Variablen env aktivieren . Wenn Sie keine Docker-Maschine verwenden, führen Sie Ihre Befehle mit sudo aus

Md Ch
quelle
3

Hat jemand das Protokoll überprüft?

In meinem Fall war die Fehlermeldung in /var/log/upstart/docker.log:

Listening for HTTP on unix (/var/run/docker.sock) 
[graphdriver] using prior storage driver "aufs" 
Running modprobe bridge nf_nat failed with message: , error: exit status 1 
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0" 

Erwähnenswert ist, dass ich VPN eingeschaltet hatte, also: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start war die Lösung.

Sławomir Lenart
quelle
3

Antwort von @srfrnk funktioniert für mich.

In meiner Situation hatte ich die nächste Datei docker-compose.yml:

  nginx:
    build:
      context: ./
      dockerfile: "./docker/nginx.staging/Dockerfile"
    depends_on:
      - scripts
    environment:
      NGINX_SERVER_NAME: "some.host"
      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_HOST: scripts
      NGINX_SERVER_ROOT: /var/www/html
    volumes:
      - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw
    ports:
      - 80:80

./docker-runtimeEigentümer und Gruppe - ist, rootwenn der andere Dateieigentümer - mein Benutzer. Als ich versuchte zu bauennginx

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

Ich habe ./docker-runtimezu .dockerignoreund es ist mein Problem gelöst.

Dima Storozhuk
quelle
3

während des Laufens docker-compose pull- ich wurde unter Fehler

FEHLER: Es konnte keine Verbindung zum Docker-Daemon unter http + docker: // localhost hergestellt werden

läuft es

Lösung -

sudo service docker start 

Problem gelöst

Kumar
quelle
2

Ich habe die gleichen Symptome gehabt.

Nur diff, dass es nur während der docker-compose build docker psArbeit passiert ist . Passiert sowohl mit der Version 2.xals auch 3.x. dockerDienst neu gestartet , dann die Maschine ... Auch neu installiert docker+ docker-compose.

Versuchte alles, aber nichts half.

Schließlich habe ich versucht, die Docker-Datei "manuell" mit zu erstellen docker build.

Anscheinend hatte ich ein Berechtigungsproblem für eine Datei / einen Ordner im DockerKontext. Beim Versuch, den Build zu starten, wurde versucht, den Kontext zu lesen, und es wurde eine ordnungsgemäße Fehlermeldung angezeigt. Jedoch Nachricht dieser Fehler nicht ausbreiten , docker-composedie nur zeigtCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Nachdem festgestellt wurde, dass die Lösung einfach die Datei / den Ordner zur .dockerignoreDatei hinzufügte, da sie für den Build nicht benötigt wurde. Eine andere Lösung könnte gewesen sein chownoder chmodes.

Auf jeden Fall könnte dies jemandem helfen, auf dasselbe Problem zu stoßen, das wirklich nichts damit zu tun hat, dockerund die irreführende Fehlermeldung wird angezeigt.

srfrnk
quelle
Ich hatte das gleiche Problem: Dateiberechtigungen in einem bereitgestellten Volume. In meinem Fall hatte ich ein SSL-Zertifikat, das Root gehörte und in ein Docker-Volume gestellt wurde. chown/ chmodReparierte es. Schreckliche Fehlermeldung, aber sie arbeiten daran. Siehe github.com/docker/compose/issues/5318
bcattle
2

$ sudo docker-compose up

Ich habe die Schritte wie in der obigen Antwort befolgt, um $ USER zum Gruppendock hinzuzufügen. Ich wollte kein neues Gruppen-Docker hinzufügen, da in meiner Docker-Installation automatisch eine Gruppe namens Docker erstellt wurde.

Docker CE ist installiert und läuft. Die Docker-Gruppe wird erstellt, aber es werden keine Benutzer hinzugefügt. Sie müssen sudo verwenden, um Docker-Befehle auszuführen. Fahren Sie mit der Nachinstallation von Linux fort, damit nicht privilegierte Benutzer Docker-Befehle ausführen und andere optionale Konfigurationsschritte ausführen können.

Aber Docker-Compose Up hat auch nicht funktioniert. Es gab den gleichen vorherigen Fehler. In meinem Fall (Ubuntu 18.10) hat sudo docker-compose up das Problem behoben.

ps: @Tiw danke für den Rat.

Nayananga Muhandiram
quelle
1
Vielleicht ist es besser, die Lösung an die erste Stelle zu setzen und die, die darunter erklären. Sie können diese Schaltflächen im Editor auch verwenden, um Ihre Antwort besser zu formatieren.
Tiw
2

Ich weiß, dass es albern ist, aber in meinem Fall habe ich es nur versucht sudound es hat wie ein Zauber funktioniert.

Versuchen Sie in Ihrem Fall einfach: $ sudo docker-compose up

Demobilizer
quelle
1

Versuche dies:

sudo ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose

TBhavnani
quelle
1

Ich habe das Problem mithilfe der folgenden Schritte behoben

$ sudo service docker status
$ sudo service docker start
$ sudo docker-compose up

Jetzt funktioniert Docker-Compose Up

KARTHIKEYAN.A
quelle
0

Für mich habe ich mit dem Upgrade von Docker begonnen und auf halbem Weg abgesagt. Ich habe nicht bemerkt, dass Docker nicht ausgeführt wird (falls dies der Fall ist, befindet sich in der oberen Navigationsleiste meines Macbooks ein Symbol für den verbleibenden Akku, die verbleibende Zeit usw.). Nachdem ich es gestartet und das Upgrade abgeschlossen hatte, docker-compose upfunktionierte es wieder!

Rock Lee
quelle
0

Mein Setup hat zwei Fälle für diesen Fehler:

  • __pycache__ Dateien, die vom Root-Benutzer erstellt wurden, nachdem ich Integrationstests im Container ausgeführt habe, sind für Docker nicht zugänglich (zeigt Ihnen das ursprüngliche Problem an) und Docker-Compose (zeigt Ihnen mehrdeutig den Docker-Host an).
  • microk8s blockierte meinen Port, bis ich ihn stoppte.
simno
quelle
0

Versuchen Sie es dockerdoder führen Sie sudo dockerdes zuerst aus, um den Daemon zu starten. Wenn Sie beginnen , dockerdmit sudoIhnen kann ausgeführt werden soll docker-compose upmit sudoauch. sonst ist es gut

Arbeitslösung von https://github.com/docker/compose/issues/4181

Gathua Kiragu
quelle
0

Das Abmelden und erneutes Abmelden hat mir geholfen. In meinem Fall war es eine Neuinstallation, ich habe einen neuen Benutzer erstellt, eine neue Gruppe und dann den Benutzer zur Docker-Gruppe hinzugefügt.

Ausfahrt Ausfahrt

dann ssh wieder in den server

Swelan Auguste
quelle
0

Folgendes hat bei mir funktioniert, ich bin mir nicht sicher, welcher Teil den Trick gemacht hat:

julian:project$ sudo service docker status
julian:varys$ 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 Wed 2020-07-15 01:21:16 UTC; 24min ago
     Docs: https://docs.docker.com
 Main PID: 6762 (dockerd)
    Tasks: 25
   CGroup: /system.slice/docker.service
           └─6762 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

julian:project$ export DOCKER_HOST=unix:///run/containerd/containerd.sock

julian:project$ sudo groupadd docker
groupadd: group 'docker' already exists
julian:project$ sudo gpasswd -a $USER docker
Adding user ubuntu to group docker
julian:project$ newgrp docker

julian:project$ ls -ln /var/run/ | grep docker
drwx------  5   0   0  120 Jul 15 01:10 docker
-rw-r--r--  1   0   0    4 Jul 15 01:10 docker.pid
srw-rw----  1   0 999    0 Jul 15 01:10 docker.sock

julian:project$ sudo rm /var/run/docker.sock                                                                                                                                                                                            
julian:project$ sudo rm /var/run/docker.pid

julian:project$ sudo service docker restart  
juliangonzalez
quelle