Wie löse ich Berechtigungsprobleme für Docker in Ubuntu?

35

Ich habe Docker wie hier beschrieben installiert . Ich verwende Ubuntu Trusty 14.04 (LTS) (64-Bit) . Alles während der Installation war gut. Der Befehl wird $ sudo docker run -i -t ubuntu /bin/bashauch ordnungsgemäß ausgeführt (nachdem ich in der geöffneten Konsole "exit" eingegeben habe. Wenn ich jedoch versuche, etwas anderes zu tun, wird die Berechtigung "verweigert". Zum Beispiel:

`$ sudo docker run -d -P training/webapp python app.py`

Reuslts in Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Reuslts in Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

Wie kann man das lösen? Ich habe über das Problem gegoogelt, aber ich kann keine Lösung für meinen Fall finden.

Kirsche
quelle

Antworten:

50

Fügen Sie die Andockgruppe hinzu, falls sie noch nicht vorhanden ist.

$ sudo groupadd docker

Fügen Sie den verbundenen Benutzer ${USER}der Docking-Gruppe hinzu. Ändern Sie den Benutzernamen so, dass er Ihrem bevorzugten Benutzer entspricht.

$ sudo gpasswd -a ${USER} docker

Starten Sie den Docker-Daemon neu:

$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd

Sie sollten sich abmelden und erneut anmelden, um die Gruppenberechtigungen zu aktualisieren. Um dies zu vermeiden, können Sie wie folgt zu einer Subshell wechseln. Oder verwenden Sie einen der anderen in dieser Frage genannten Tricks :

su - $USER
Pyprismus
quelle
14
Ich musste neu starten, damit dies wirksam wurde.
Obsoleter
8
Sie müssen nicht neu starten, sondern sich nur abmelden und anmelden.
Ajay Gautam
2
Logout hat es geschafft, auch wenn exec $SHELLnicht. Ich bin interessiert zu wissen, durch welchen Mechanismus das Problem behoben wurde. Das sind keine Fenster!
Darth Egregious
1
In Fedora müssen Sie zuerst Linux/etc/selinux/configSELINUX=disabled
Junior M
1
Tolle Erklärung! Du bist der beste! :)
Francis Rodrigues
5

Wenn Sie CentOS oder RedHat ausführen, müssen Sie SELinux möglicherweise zuerst deaktivieren, indem Sie Folgendes ausführen:

setenforce 0

Führen Sie anschließend einen Neustart durch, um SELinux wieder zu aktivieren oder auszuführen setenforce 1.

joelschmid
quelle
4

Ich hatte das gleiche Problem wegen Selinux. Sie können überprüfen, ob Selinux der Schuldige ist, indem Sie:

  1. Selinux deaktivieren: setenforce 0
  2. Wiederholen

Wenn das Deaktivieren von selinux Ihr Problem gelöst hat, ist es kein Grund, es deaktiviert zu lassen:

  1. Selinux aktivieren: setenforce 1
  2. Lassen Sie die Socket-Verbindung in der Selinux-Konfiguration zu: setsebool docker_connect_any true
  3. Führen Sie Ihren Docker-Container mit der --priviledgedOption aus
Paul Podgorsek
quelle
3

Ich gehe davon aus, dass sich Ihr Benutzername bereits in der Docker-Gruppe befindet. Um dies zu überprüfen, geben Sie den folgenden Befehl ein.

id -nG

Wenn nicht, müssen Sie Ihren Benutzer mit dem folgenden Befehl zur Docking-Gruppe hinzufügen.

sudo groupadd docker
sudo usermod -aG docker $USER

Wenn Sie den Befehl ausführen sudo systemctl start docker, wird ein Docker-Prozess erstellt. Dieser Docker-Prozess enthält einen dockerdDaemon-Thread. Der Befehl erstellt auch einen Standard- docker.sockUnix-Socket. Der docker.sockSocket wird ständig vom dockerdDaemon-Thread abgehört . Auf diese Weise können Sie IPCs auf Kernel-Ebene mit docker.pidprocess ausführen . Um diesen Docker-Socket verwenden zu können, benötigen Sie die entsprechenden Berechtigungen auf Prozess- ( docker.pid) und Dateiebene ( docker.sock). Wenn Sie also die folgenden zwei Befehle ausführen, sollte das Problem behoben sein. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid

Uddhav Gautam
quelle
1

In der aktuellen Version müssen wir die Gruppe nicht hinzufügen docker.
Es ist bei der Installation automatisch vorhanden. Sie können dies mit dem folgenden Befehl überprüfen:

$ sudo groupadd docker
groupadd: group 'docker' already exists

Um Docker als Nicht-Root-Benutzer zu verwalten , fügen Sie einfach Ihren Benutzer der Docker-Gruppe hinzu und melden Sie sich dann ab und wieder an, damit Ihre Gruppenmitgliedschaft erneut bewertet wird:

$ sudo usermod -aG docker $USER
$ logout

So überprüfen Sie es, wenn Sie sich erneut anmelden

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

Sie können sogar die Verwendung GROUP:dockerals neue Primärgruppe erzwingen :

$ sudo chown "$USER":"docker" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
$ sudo usermod -g docker ${USER}
$ logout

So überprüfen Sie es, wenn Sie sich erneut anmelden

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
Chetabahana
quelle