Come risolvere la finestra mobile: problema con autorizzazione negata


303

Ho installato Docker sul mio computer dove ho il sistema operativo Ubuntu. Dopo di che ho installato la finestra mobile, quando corro

sudo docker run hello-world

Va tutto bene, ma voglio nascondere la parola sudoper rendere più breve il comando.

Se scrivo il comando senza la parola sudo

docker run hello-world

Che visualizzano quanto segue:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

È successo lo stesso quando provo a fare

docker-compose up

Come posso risolvere questo?



Risposte:


439

Se si desidera eseguire la finestra mobile come utente non root, è necessario aggiungerla al gruppo finestra mobile.

  1. Creare il gruppo finestra mobile se non esiste
$ sudo groupadd docker
  1. Aggiungi il tuo utente al gruppo docker.
$ sudo usermod -aG docker $USER
  1. Esegui il seguente comando o Esci e accedi di nuovo ed esegui (che non funziona potrebbe essere necessario riavviare prima il computer)
$ newgrp docker

  1. Controlla se la finestra mobile può essere eseguita senza root
$ docker run hello-world

Tratto dalla documentazione ufficiale della finestra mobile: manage-docker-as-a-non-root-user


70
Ho ancora questo problema dopo aver eseguito tutti e tre i passaggi "(
Anand,

78
Ho dovuto riavviare Ubuntu 18 per farlo funzionare - semplicemente disconnettersi e riconnettersi non ha funzionato.
heez,

26
@heez potrebbe non essere necessario un riavvio, riavviare la finestra mobile è stato sufficiente per me. sudo systemctl restart docker
Sonaglio

5
Si noti che il fatto di essere nel dockergruppo garantisce essenzialmente l' accesso alla radice , senza applicare politiche e controlli sudo regolari. Vedi il numero 9976 di GitHub per dettagli e discussioni.
Raehik,

13
Il riavvio della finestra mobile non ha funzionato per me, ma solo il riavvio (Ubuntu 18.04)
Joakim Tall

360

Dopo un aggiornamento mi è stata negata l'autorizzazione. Eseguendo i passaggi di "mkb" dopo l'installazione non si modifica nulla perché il mio utente era già nel gruppo "docker"; Ci riprovo due volte in qualsiasi modo senza successo.

Dopo un'ora di ricerca, questa soluzione ha funzionato alla fine:

sudo chmod 666 /var/run/docker.sock

La soluzione è arrivata da Olshansk .

Sembra che l'aggiornamento abbia ricreato il socket senza l'autorizzazione sufficiente per il gruppo "docker".

I problemi

Questo difficile chmod apre la falla di sicurezza e dopo ogni riavvio, questo errore si ripete ancora e ancora ed è necessario eseguire nuovamente il comando sopra ogni volta. Voglio una soluzione una volta per tutte. Per questo hai due problemi:

  • 1) Problema conSystemD : il socket verrà creato solo con il proprietario "root" e il gruppo "root".

    Puoi controllare questo primo problema con questo comando:

    ls -l /lib/systemd/system/docker.socket
    

    Se tutto questo va bene, dovresti vedere ' root/docker' non ' root/root'.

  • 2) Problema con l' accesso grafico : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    Puoi controllare questo secondo problema con questo comando:

    groups
    

    Se tutto è corretto, dovresti vedere il gruppo docker nell'elenco. Altrimenti prova il comando

    sudo su $USER  -c groups
    

    se vedi quindi il gruppo finestra mobile è a causa del bug.

soluzioni

Se riesci a ottenere una soluzione alternativa per l'accesso grafico, questo dovrebbe fare il lavoro:

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Ma se non riesci a gestire questo bug, una soluzione non così male potrebbe essere questa:

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Questo funziona perché ti trovi in ​​un ambiente grafico e probabilmente l'unico utente sul tuo computer. In entrambi i casi è necessario un riavvio (o un sudo chmod 666 /var/run/docker.sock)


2
se la finestra mobile è stata installata come da documento su docs.docker.com/install , non sarà mai necessario gestire tali comandi
Scott Stensland

4
@Scott Stensland Ho installato la finestra mobile molte volte "come da documento". Penso che il problema derivi da una cattiva interazione con un altro pacchetto non identificato.
Galigator,

1
In docker-in-docker, stavo montando /var/run/docker.sock in modo errato dall'host senza la :rofine ... non appena ho aggiunto che ero a posto
jakebrinkmann

2
Uso Ubuntu 18 su EC2 - AWS e ha funzionato perfettamente. Tutti gli altri (sudo usermod -aG docker $ USER e altre cose) non hanno funzionato
cherah30

1
Grazie, risolto in Ubuntu 18.04 LTS. riaffermare e aggiungere a
groud

32
  1. Aggiungi gruppo docker
$ sudo groupadd docker
  1. Aggiungi il tuo utente corrente al gruppo docker
$ sudo usermod -aG docker $USER
  1. Passa la sessione al gruppo finestra mobile
$ newgrp - docker
  1. Esegui un esempio per testare
$ docker run hello-world

Il newgrpcomando ha richiesto una password e non ha accettato la mia password utente. Invece ha su - $USERfunzionato per evitare il logout / in.
bluenote10

18
  1. Aggiungi l'utente corrente al dockergruppo
sudo usermod -aG docker $USER
  1. Modificare le autorizzazioni del socket docker per poter connettersi al daemon docker /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

Risolvo questo errore con il comando:

$ sudo chmod 666 /var/run/docker.sock



2

Per risolvere il problema, ho cercato dove sono installati il ​​mio docker e il docker-compose. Nel mio caso, è dockerstato installato /usr/bin/dockered è docker-composestato installato nel /usr/local/bin/docker-composepercorso. Quindi, scrivo questo nel mio terminale:

Alla finestra mobile:

sudo chmod +x /usr/bin/docker

A docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

Ora non ho bisogno di scrivere nella mia finestra mobile comandi la parola sudo

/ ************************************************* ********************** /

ERRATA:

La migliore soluzione di questo problema è stata commentata da @mkasberg. Cito un commento:

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

Molte grazie!


2
Potrebbe funzionare, potresti incorrere in problemi lungo la strada. Inoltre, è una vulnerabilità di sicurezza. Faresti meglio ad aggiungerti al dockergruppo, come dicono i documenti. sudo groupadd docker, sudo usermod -aG docker $USER.
mkasberg,

Ehi @mkasberg! Grazie per il tuo commento! Ho fatto un errore per citare la tua soluzione. Molte grazie!
Carlos Andres,

1

lightdm e kwallet vengono spediti con un bug che sembra non passare i gruppi supplementari al login. Per risolvere questo, ho anche sudo usermod -aG docker $USERdovuto commentare

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

per

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

in /etc/pam.d/lightdm prima di riavviare , per la finestra mobile-gruppo in realtà avere effetto.

bug: https://bugs.launchpad.net/lightdm/+bug/1781418 e qui: https://bugzilla.redhat.com/show_bug.cgi?id=1581495


1

usa questo comando

sudo usermod -aG docker $USER

quindi riavvia il tuo computer, questo ha funzionato per me.


1

Davvero ragazzi. Non aggiungere Docker nei tuoi gruppi o modificare il posix socket (senza un SELinux indurente), è un modo semplice per fare un privesc root. Basta aggiungere un alias nel tuo .bashrc, è più semplice e sicuro come: alias dc = 'sudo docker'.


1

puoi seguire questi passaggi e questo funzionerà per te:

  1. creare un gruppo docker sudo groupadd docker
  2. aggiungi il tuo utente a questo gruppo sudo usermod -aG docker $USER
  3. elencare i gruppi per assicurarsi che quel gruppo docker sia stato creato correttamente eseguendo questo comando groups
  4. eseguire il comando seguente anche per modificare la sessione per il gruppo finestra mobile newgrp docker
  5. modificare la proprietà del gruppo per il file docker.socksudo chown root:docker /var/run/docker.sock
  6. cambia la proprietà per la directory .docker sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. finalmente sudo chmod g+rwx "$HOME/.docker" -R

Dopo quel test puoi eseguire docker ps -a


Volevo una risposta che non richiedesse il riavvio. Questa è stata l'unica risposta che lo ha fornito. Il "trucco" sta nel chownfile docker.sock.
Potherca,

1

Dopo aver installato la finestra mobile, creato il gruppo 'finestra mobile' e aggiunto l'utente ad esso, modificare il file dell'unità di servizio della finestra mobile:

sudo nano /usr/lib/systemd/system/docker.service

Aggiungi due righe nella sezione [Servizio]:

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

Salva il file (Ctrl-X, y, Enter)

Esegui e abilita il servizio Docker:

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

0

Dopo l'installazione Docker su Centos. Durante l'esecuzione sotto il comando sono arrivato sotto l'errore.

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Modifica gruppo e autorizzazione per docker.socket

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

Verificare utilizzando il comando docker sottostante

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

-4

sudo chmod 666 /var/run/docker.sock

questo mi ha aiutato mentre stavo ottenendo errori anche per accedere alla finestra mobile Ma ora funziona perfettamente nel mio sistema.


1
È molto insicuro usare questo metodo. Esamina le istruzioni post installazione fornite sui commenti nella domanda principale.
Alejandro Visiedo García,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.