A questa domanda è già stata data una risposta, ma ecco un'ulteriore informazione.
Non importa se sei su Arch o un'altra distribuzione come Fedora o Ubuntu, Docker utilizza un file socket per comunicare. Quando si eseguono docker
comandi, utilizza questo socket per parlare con il demone Docker. Naturalmente, il demone deve essere in esecuzione (ed è spesso disabilitato per impostazione predefinita), ma se l'utente non può accedere al socket, non sarebbe nemmeno in grado di comunicare con il demone.
Installare prima Docker dal repository della distribuzione. Alcune persone scaricano uno script di installazione e lo instradano in una shell ( curl ... | sh
), ma si consiglia di installarlo dal repository in modo che possa essere aggiornato facilmente.
Arco:
# pacman -S docker
Fedora:
# dnf install docker
Come menzionato sopra, il demone può essere disabilitato di default. Se si desidera utilizzare Docker, il daemon deve essere in esecuzione.
Abilitalo (quindi verrà avviato all'avvio):
# systemctl enable docker
Avvialo ora (o riavvia):
# systemctl start docker
Ora, per impostazione predefinita (se manca il gruppo docker), il socket Docker è di proprietà di root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Questo è il motivo per cui un utente normale non è in grado di parlare con il demone docker. Un utente normale non dispone di autorizzazioni sufficienti per accedere al socket. Non è in grado di raggiungere il demone, quindi presuppone che non sia in esecuzione e mostra questo errore:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Questo è il motivo per cui molte persone semplicemente avviano tutti i comandi Docker come root, usando sudo
. Ma come descritto nell'altra risposta, Docker ha un suo meccanismo per questo, quindi l'uso di sudo non è necessario.
Idealmente, un gruppo chiamato docker
viene creato durante l'installazione di Docker. Tuttavia, se quel gruppo non esiste all'avvio del daemon, il file socket è di proprietà di root.
In alcuni casi, quel gruppo aveva un nome diverso, come dockerroot
su Fedora . Controlla grep docker /etc/group
se esiste un gruppo del genere sul tuo sistema. Se stai già utilizzando quel gruppo (il tuo utente è presente), dovrai configurare Docker per usarlo:
In /etc/sysconfig/docker
, aggiungi -G dockerroot
(nota: è una soluzione alternativa, non la soluzione migliore):
OPTIONS='--selinux-enabled -G dockerroot'
Dopo aver riavviato il demone, l'utente sarà in grado di accedere al socket:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
Altrimenti, il modo ufficiale sarebbe usare il gruppo chiamato docker
. Se esiste, Docker lo utilizzerà automaticamente, ovvero imposta il gruppo del socket su quel gruppo. Se non esiste, tutto ciò che devi fare è crearlo e riavviare il demone:
# groupadd docker
# systemctl restart docker
Il file socket sarà di proprietà di quel gruppo:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
L'utente deve essere nel docker
gruppo per poter accedere al socket:
# usermod -aG docker (user)
Potrebbe essere necessario disconnettersi e accedere nuovamente (o su - (user)
), eseguire id
per vedere se si è nel gruppo.
È quindi possibile utilizzare Docker senza sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Finalmente un avvertimento. Solo gli utenti fidati dovrebbero essere autorizzati a controllare il demone Docker . Vedi https://docs.docker.com/engine/security/security/ .
(Ma ovviamente lo stesso vale per sudo: solo gli utenti fidati dovrebbero essere nel wheel
gruppo.)