Der Docker-Dienst wird offensichtlich ausgeführt:
$ 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 verwende die Standard-Docker-Konfiguration , das heißt, ich habe keine /etc
Dateien in Bezug auf diesen Dienst geändert .
Woran könnte das liegen?
arch-linux
docker
l0b0
quelle
quelle
sudo systemctl start docker
Diese Frage wurde bereits beantwortet, aber hier ist eine zusätzliche Information.
Egal, ob Sie sich in Arch oder einer anderen Distribution wie Fedora oder Ubuntu befinden, Docker verwendet zur Kommunikation eine Socket-Datei. 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 Benutzer laden ein Installationsskript herunter und leiten es an eine Shell (
curl ... | sh
) weiter. Es wird jedoch empfohlen, es aus dem Repository zu installieren, damit es problemlos aktualisiert werden kann.Bogen:
Fedora:
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):
Starte es jetzt (oder starte neu):
Standardmäßig (wenn die Docker-Gruppe fehlt) gehört der Docker-Socket root:
Aus diesem Grund kann ein normaler Benutzer nicht mit dem Docker-Daemon kommunizieren. Ein normaler Benutzer verfügt nicht über ausreichende Berechtigungen, um auf den Socket zuzugreifen. Es ist nicht in der Lage, den Dämon zu erreichen, 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
docker
wird bei der Installation von Docker eine aufgerufene Gruppe erstellt. Wenn diese Gruppe jedoch beim Starten des Dämons nicht vorhanden ist, befindet sich die Socket-Datei im Besitz von root.In einigen Fällen hatte diese Gruppe einen anderen Namen, wie
dockerroot
bei Fedora . Überprüfen Siegrep docker /etc/group
, ob auf Ihrem System eine solche Gruppe vorhanden ist. Wenn Sie diese Gruppe bereits verwenden (Ihr Benutzer ist in der Gruppe), müssen Sie Docker für die Verwendung konfigurieren:/etc/sysconfig/docker
Fügen-G dockerroot
Sie Folgendes hinzu (Hinweis: Dies ist eine Problemumgehung und nicht die beste Lösung):Nach dem Neustart des Daemons kann Ihr Benutzer auf den Socket zugreifen:
Andernfalls wäre der offizielle Weg, die angerufene Gruppe zu verwenden
docker
. Wenn es existiert, wird es von Docker automatisch verwendet, dh die Gruppe des Sockets wird auf diese Gruppe gesetzt. Wenn es nicht existiert, müssen Sie es nur erstellen und den Daemon neu starten:Die Socket-Datei gehört dieser Gruppe:
Ihr Benutzer muss Mitglied der
docker
Gruppe sein, um auf den Socket zugreifen zu können:Möglicherweise müssen Sie sich abmelden und erneut anmelden (oder
su - (user)
), um festzustellenid
, ob Sie Mitglied der Gruppe sind.Sie können Docker dann ohne sudo / root verwenden:
Zum Schluss noch eine Warnung. Nur vertrauenswürdige Benutzer sollten berechtigt sein, Ihren Docker-Daemon zu steuern . Siehe https://docs.docker.com/engine/security/security/ .
(Dies gilt natürlich auch für sudo - nur vertrauenswürdige Benutzer sollten in der
wheel
Gruppe sein.)quelle
dann abmelden und wieder anmelden
quelle
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:
Nach der Installation von Docker:
Ein Benutzer muss zur Docker-Gruppe hinzugefügt werden.
Der Docker-Daemon muss gestartet werden
Sie können den Dämon so einstellen, dass er beim Booten startet
Sie können überprüfen, ob der Docker-Dienst ausgeführt wird
Und noch eine letzte Endkontrolle
quelle
pacman
, Verwendensystemctl
anstelle vonservice
+chkconfig
).Wenn Sie die Fedora 23- oder Redhat-Variante verwenden, bearbeiten
/etc/sysconfig/docker
und ändern Sie FolgendesDocker neu starten.
Stellen Sie sicher, dass Sie diese Gruppe zum System hinzufügen und sich selbst der Gruppe hinzufügen.
quelle
Dieser Befehl funktioniert bei mir
Ich habe die Lösung auf dieser Seite gefunden, wenn Sie weitere Dokumentation benötigen. Warum wir Nicht-Root-Benutzern nicht erlauben, Docker unter CentOS, Fedora oder RHEL auszuführen?
quelle
Wenn Sie Ihre Docker-Engine mit folgendem Befehl gestartet haben: sudo service docker start
Sie können keine Verbindung mit einem normalen Benutzer herstellen, auch wenn Sie sich selbst zur Gruppe "Docker" hinzugefügt haben.
Sie können es einfach stoppen mit: sudo service docker stop
und starte es als normaler Benutzer: service docker start
quelle
docker group
bis jetzt keinen Benutzer hinzufügen .sudo service start
arbeitete für mich. Ich werde jedoch beobachten, ob es etwas Neues gibt.Ich hatte auch das gleiche Problem. Das Problem lag in Sockets, die Docker-Daemon und Docker-Client zugewiesen waren.
Erstens wurde die Berechtigung für den Docker-Client auf docker.sock nicht festgelegt. Sie können sie mit festlegen
sudo usermod -aG docker $USER
Überprüfen Sie dann Ihre Bash-Datei, in der der Docker-Client ausgeführt wird. Für mich war es auf 0.0.0.0:2375 gesetzt, während der Docker-Daemon auf einem Unix-Socket lief. (Es wurde in der Konfigurationsdatei von dockerd eingestellt).
Kommentieren Sie einfach die beleidigende Zeile aus und es wird gut funktionieren.
Aber wenn Sie möchten, dass es auf dem TCP-Port statt auf dem Unix-Socket funktioniert, ändern Sie die Konfigurationsdatei von dockerd, setzen Sie sie auf 0.0.0.0.2375 und belassen Sie die Zeile in bash, so wie sie ist, oder setzen Sie sie auf 0.0. 0,0: 2375.
quelle
Dies sind die Schritte, die ich befolgt habe, um Folgendes zu beheben
Fügen Sie sich der Docker-Gruppe hinzu
usermod -aG docker $USER
Korrigieren Sie die Berechtigungen für Docker Socker und Command.
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
Fügen Sie der Konfigurationsumgebung Variablen für den Docker-Befehl hinzu
export DOCKER_HOST=unix:///var/run/docker.sock
Rest Docker
sudo systemctl restart docker
quelle