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:
# 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
Starte es jetzt (oder starte 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 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 Sie grep 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):
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 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:
# 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 Mitglied der docker
Gruppe sein, 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)
), um festzustellen id
, ob Sie Mitglied der Gruppe sind.
Sie können Docker dann ohne sudo / root verwenden:
$ docker version --format '{{.Server.Version}}'
1.9.1
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.)