Cette question a déjà été répondue, mais voici une information supplémentaire.
Que vous soyez sur Arch ou sur une autre distribution comme Fedora ou Ubuntu, Docker utilise un fichier socket pour communiquer. Lorsque vous exécutez des docker
commandes, il utilise ce socket pour parler au démon Docker. Bien sûr, le démon doit être en cours d'exécution (et il est souvent désactivé par défaut), mais si votre utilisateur ne peut pas accéder au socket, il ne pourra pas non plus communiquer avec le démon.
Vous devez d'abord installer Docker à partir du référentiel de la distribution. Certaines personnes téléchargent un script d'installation et le dirigent vers un shell ( curl ... | sh
), mais il est recommandé de l'installer à partir du référentiel afin qu'il puisse être mis à jour facilement.
Cambre:
# pacman -S docker
Feutre:
# dnf install docker
Comme mentionné ci-dessus, le démon peut être désactivé par défaut. Si vous souhaitez utiliser Docker, le démon doit être en cours d'exécution.
Activez-le (pour qu'il démarre au démarrage):
# systemctl enable docker
Démarrez-le maintenant (ou redémarrez):
# systemctl start docker
Maintenant, par défaut (si le groupe docker est manquant), le socket Docker appartient à root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
C'est pourquoi un utilisateur régulier n'est pas en mesure de parler au démon docker. Un utilisateur ordinaire ne dispose pas des autorisations suffisantes pour accéder au socket. Il n'est pas en mesure d'atteindre le démon, il suppose donc qu'il n'est pas en cours d'exécution et affiche cette erreur:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
C'est pourquoi de nombreuses personnes démarrent simplement toutes les commandes Docker en tant que root, en utilisant sudo
. Mais comme décrit dans l'autre réponse, Docker a son propre mécanisme pour cela, donc l'utilisation de sudo n'est pas nécessaire.
Idéalement, un groupe appelé docker
est créé lors de l'installation de Docker. Cependant, si ce groupe n'existe pas au démarrage du démon, le fichier socket appartient à root.
Dans certains cas, ce groupe avait un nom différent, comme dockerroot
sur Fedora . Vérifiez grep docker /etc/group
s'il existe un tel groupe sur votre système. Si vous utilisez déjà ce groupe (votre utilisateur y est), vous devrez configurer Docker pour l'utiliser:
Dans /etc/sysconfig/docker
, ajoutez -G dockerroot
(remarque: c'est une solution de contournement, pas la meilleure solution):
OPTIONS='--selinux-enabled -G dockerroot'
Après avoir redémarré le démon, votre utilisateur pourra accéder au socket:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
Sinon, la manière officielle serait d'utiliser le groupe appelé docker
. S'il existe, Docker l'utilisera automatiquement, c'est-à-dire qu'il définira le groupe du socket sur ce groupe. S'il n'existe pas, il vous suffit de le créer et de redémarrer le démon:
# groupadd docker
# systemctl restart docker
Le fichier socket appartiendra à ce groupe:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Votre utilisateur doit être dans le docker
groupe pour pouvoir accéder au socket:
# usermod -aG docker (user)
Vous devrez peut-être vous déconnecter et vous reconnecter (ou su - (user)
), exécutez id
pour voir si vous êtes dans le groupe.
Vous pouvez ensuite utiliser Docker sans sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Enfin, un mot d'avertissement. Seuls les utilisateurs de confiance doivent être autorisés à contrôler votre démon Docker . Voir https://docs.docker.com/engine/security/security/ .
(Mais bien sûr, il en va de même pour sudo - seuls les utilisateurs de confiance doivent faire partie du wheel
groupe.)