it-swarm.com.de

Warum wird "Kann keine Verbindung zum Docker-Dämon herstellen" angezeigt, wenn der Dämon ausgeführt wird?

Der Docker-Dienst läuft eindeutig:

$ systemctl status docker.service 
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
     Docs: https://docs.docker.com
 Main PID: 1015 (docker)
   CGroup: /system.slice/docker.service
           └─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root      1015  0.0  0.3 477048 12432 ?        Ssl   2015   2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs

Docker selbst weigert sich jedoch, mit ihm zu sprechen:

$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Ich führe die Standard-Docker-Konfiguration aus, dh ich habe keine /etc - Dateien geändert, die sich auf diesen Dienst beziehen.

Was könnte hier das Problem sein?

33
l0b0

Sie müssen fügen Sie sich der Gruppe docker hinz und die Gruppe aktivieren (indem Sie sich abmelden und erneut anmelden oder newgrp docker Ausführen), um docker Befehle auszuführen . Die Fehlermeldung ist einfach irreführend.

37
l0b0

Diese Frage wurde bereits beantwortet, aber hier ist eine zusätzliche Information.

Egal, ob Sie auf Arch oder einer anderen Distribution wie Fedora oder Ubuntu arbeiten, Docker verwendet eine Socket-Datei für die Kommunikation. Wenn Sie docker -Befehle ausführen, wird dieser Socket verwendet, um mit dem Docker-Daemon zu kommunizieren. Natürlich muss der Dämon ausgeführt werden (und er ist häufig standardmäßig deaktiviert), aber wenn Ihr Benutzer nicht auf den Socket zugreifen kann, kann er auch nicht mit dem Dämon kommunizieren.

Sie würden Docker zuerst aus dem Repository der Distribution installieren. Einige Leute laden ein Installationsskript herunter und leiten es an eine Shell weiter (curl ... | sh). Es wird jedoch empfohlen, es aus dem Repository zu installieren, damit es problemlos aktualisiert werden kann.

Bogen:

# pacman -S docker

Fedora:

# dnf install docker

Wie oben erwähnt, ist der Dämon möglicherweise standardmäßig deaktiviert. Wenn Sie Docker verwenden möchten, muss der Dämon ausgeführt werden.

Aktivieren Sie es (damit es beim Booten gestartet wird):

# systemctl enable docker

Starten Sie es jetzt (oder starten Sie es neu):

# systemctl start docker

Standardmäßig (wenn die Docker-Gruppe fehlt) gehört der Docker-Socket root:

# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock

Aus diesem Grund kann ein normaler Benutzer nicht mit dem Docker-Daemon sprechen. Ein normaler Benutzer verfügt nicht über ausreichende Berechtigungen, um auf den Socket zuzugreifen. Der Daemon kann nicht erreicht werden. Daher wird davon ausgegangen, dass er nicht ausgeführt wird, und der folgende Fehler wird angezeigt: Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Aus diesem Grund starten viele Benutzer einfach alle Docker-Befehle als root mit Sudo. Wie in der anderen Antwort beschrieben, verfügt Docker jedoch über einen eigenen Mechanismus, sodass die Verwendung von Sudo nicht erforderlich ist.

Idealerweise wird bei der Installation von Docker eine Gruppe mit dem Namen docker erstellt. Wenn diese Gruppe jedoch beim Starten des Dämons nicht vorhanden ist, gehört die Socket-Datei root.

In einigen Fällen hatte diese Gruppe einen anderen Namen, wie dockerroot auf Fedora . Überprüfen Sie grep docker /etc/group, Um festzustellen, ob sich auf Ihrem System eine solche Gruppe befindet. Wenn Sie diese Gruppe bereits verwenden (Ihr Benutzer ist darin), müssen Sie Docker für die Verwendung konfigurieren:

Fügen Sie in /etc/sysconfig/docker-G dockerroot Hinzu (Hinweis: Dies ist eine Problemumgehung, nicht die beste Lösung):

OPTIONS='--selinux-enabled -G dockerroot'

Nach dem Neustart des Daemons kann Ihr Benutzer auf den Socket zugreifen:

# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock

Andernfalls wäre der offizielle Weg, die Gruppe docker zu verwenden. Wenn es existiert, wird Docker es automatisch verwenden, d. H. Die Socket-Gruppe auf diese Gruppe setzen. Wenn es nicht vorhanden ist, müssen Sie es nur erstellen und den Daemon neu starten:

# groupadd docker
# systemctl restart docker

Die Socket-Datei gehört dieser Gruppe:

# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock

Ihr Benutzer muss sich in der Gruppe docker befinden, um auf den Socket zugreifen zu können:

# usermod -aG docker (user)

Möglicherweise müssen Sie sich abmelden und erneut anmelden (oder su - (user)) und id ausführen, um festzustellen, ob Sie in der Gruppe sind.

Sie können Docker dann ohne Sudo/root verwenden:

$ docker version --format '{{.Server.Version}}'
1.9.1

Zum Schluss noch ein Wort der Warnung. Nur vertrauenswürdige Benutzer sollten Ihren Docker-Daemon steuern dürfen . Siehe https://docs.docker.com/engine/security/security/ .
(Dies gilt natürlich auch für Sudo - nur vertrauenswürdige Benutzer sollten in der Gruppe wheel sein.)

41
basic6

Sudo usermod -aG Docker [Benutzername]

dann abmelden, dann wieder anmelden

3
user2167582

Wenn Sie Ihre Docker-Engine gestartet haben mit: Sudo Service Docker Start

sie können keine Verbindung mit einem normalen Benutzer herstellen, selbst wenn Sie sich der Docker-Gruppe hinzugefügt haben.

Sie können es einfach stoppen mit: Sudo Service Docker Stop

und starten Sie es als normaler Benutzer: Service Docker starten

1
Raymond

Wenn Sie die Fedora 23- oder Redhat-Variante verwenden, bearbeiten Sie /etc/sysconfig/docker und ändern Sie Folgendes

OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'

Starten Sie Docker neu.

Stellen Sie sicher, dass Sie diese Gruppe zum System hinzufügen und sich selbst zur Gruppe hinzufügen.

1
Stuart James

Nachdem ich einige Nachforschungen angestellt hatte, um dieses Problem auf meinem Linux-System zu lösen, dachte ich, ich würde diese Antwort schreiben. Hier ist, was ich getan habe, 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
1
Ronald Weidner

Dieser Befehl funktioniert bei mir

Sudo grep dwalsh /etc/sudoers

alias docker="Sudo /usr/bin/docker"

Ich habe die Lösung auf dieser Seite gefunden, wenn Sie weitere Dokumentation benötigen. Warum wir nicht zulassen, dass Nicht-Root-Benutzer Docker in CentOS, Fedora oder RHEL ausführen

1
DarKainSoul

Dies sind die Schritte, die ich befolgt habe, um Folgendes zu beheben

$ docker info
Cannot connect to the Docker daemon at 
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
  1. Fügen Sie sich der Docker-Gruppe hinzu

    usermod -aG docker $USER

  2. Korrigieren Sie die Berechtigungen für Docker Socker und Befehl.

    Sudo chgrp docker /usr/bin/docker
    Sudo chgrp docker /var/run/docker.sock

    $ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*

    $ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock

  3. Fügen Sie der Konfigurationsumgebung Variablen für den Docker-Befehl hinzu

    export DOCKER_Host=unix:///var/run/docker.sock

  4. Rest Docker

    Sudo systemctl restart docker

0
nelaaro

Ich hatte auch das gleiche Problem. Das Problem lag in Sockets, die Docker-Daemon und Docker-Client zugewiesen waren.

  1. Erstens wurde für den Docker-Client auf docker.sock keine Berechtigung festgelegt. Sie können sie mit Sudo usermod -aG docker $USER Festlegen.

  2. Überprüfen Sie dann Ihre Bash-Datei, in der der Docker-Client ausgeführt wird. Für mich wurde es auf 0.0.0.0:2375 gesetzt, während Docker-Daemon auf Unix-Socket lief. (Es wurde in der Konfigurationsdatei von dockerd festgelegt).

  3. Kommentieren Sie einfach die beleidigende Zeile aus und es wird gut funktionieren.

  4. Wenn Sie jedoch möchten, dass es auf TCP Port anstelle von Unix-Socket) funktioniert, ändern Sie die Konfigurationsdatei von Dockerd, setzen Sie sie auf 0.0.0.0.2375 und behalten Sie die Zeile in Bash bei ist, falls vorhanden, oder setzen Sie es auf 0.0.0.0:2375.

0
Nilesh Kande