Le service Docker fonctionne clairement:
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
Docs: https://docs.docker.com
Main PID: 1015 (docker)
CGroup: /system.slice/docker.service
└─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root 1015 0.0 0.3 477048 12432 ? Ssl 2015 2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
Cependant, Docker lui-même refuse de lui parler:
$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
J'exécute configuration Docker par défaut , c'est-à-dire que je n'ai changé aucun /etc
fichiers relatifs à ce service.
Quel pourrait être le problème ici?
Vous devez vous ajouter au groupe docker
et activer le groupe (en vous déconnectant et en vous reconnectant ou en exécutant newgrp docker
) pour exécuter les commandes docker
. Le message d'erreur est tout simplement trompeur.
Cette question a déjà été répondue, mais voici une information supplémentaire.
Peu importe si vous êtes sur Arch ou une autre distribution comme Fedora ou Ubuntu, Docker utilise un fichier socket pour communiquer. Lorsque vous exécutez les commandes docker
, 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 normal 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
Pour voir s'il existe un tel groupe sur votre système. Si vous utilisez déjà ce groupe (votre utilisateur y est), vous devez 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 groupe docker
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 devraient ê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 être dans le groupe wheel
.)
Sudo usermod -aG docker [nom d'utilisateur]
puis vous déconnecter puis vous reconnecter
Si vous avez démarré votre moteur docker avec: Sudo service docker start
vous ne pouvez pas vous connecter avec un utilisateur normal même si vous vous êtes ajouté au groupe 'docker'.
Vous pouvez simplement l'arrêter avec: Arrêt de docker de service Sudo
et le démarrer en tant qu'utilisateur normal: démarrage du service docker
Si vous utilisez Fedora 23 ou la variante de Redhat, modifiez /etc/sysconfig/docker
et modifiez ce qui suit
OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'
Redémarrez docker.
Assurez-vous d'ajouter ce groupe au système et de vous ajouter au groupe.
Après avoir fait quelques recherches pour résoudre ce problème sur mon système Linux, j'ai pensé que j'écrirais cette réponse. Voici ce que j'ai fait pour résoudre le problème.
Sur Fedora 22
Installation de Docker:
$> curl -fsSL https://get.docker.com/ | sh
Après avoir installé Docker:
Un utilisateur doit être ajouté au groupe Docker.
$> Sudo usermod -aG docker
Le démon docker doit être démarré
$> Sudo service docker start
Vous pouvez configurer le démon pour qu'il démarre au démarrage
$> Sudo chkconfig docker on
Vous pouvez vérifier que le service Docker est en cours d'exécution
$> service docker status
Et une dernière vérification finale
$> docker run hello-world
Cette commande fonctionne pour moi
Sudo grep dwalsh /etc/sudoers
alias docker="Sudo /usr/bin/docker"
J'ai trouvé la solution sur cette page si vous avez besoin de plus de documentation. Pourquoi nous ne permettons pas aux utilisateurs non root d'exécuter Docker dans CentOS, Fedora ou RHEL
Ce sont les étapes que j'ai suivies pour corriger ce qui suit
$ docker info
Cannot connect to the Docker daemon at
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
Ajoutez-vous au groupe docker
usermod -aG docker $USER
Correction des autorisations sur docker socker et command.
Sudo chgrp docker /usr/bin/docker
Sudo chgrp docker /var/run/docker.sock
$ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*
$ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock
Ajouter des variables à la configuration de l'environnement pour la commande docker
export DOCKER_Host=unix:///var/run/docker.sock
Rest Docker
Sudo systemctl restart docker
J'ai également eu le même problème. Le problème était dans les sockets allouées à docker-daemon et docker-client.
Tout d'abord, l'autorisation n'a pas été définie pour le client docker sur docker.sock Vous pouvez la définir à l'aide de Sudo usermod -aG docker $USER
Vérifiez ensuite votre fichier bash où le docker-client s'exécute. Pour moi, il était réglé sur 0.0.0.0:2375, alors que le démon docker fonctionnait sur un socket Unix. (Il a été défini dans le fichier de configuration de dockerd).
Il suffit de commenter la ligne incriminée et cela fonctionnera bien.
Mais si vous voulez le faire fonctionner sur le port TCP au lieu du socket unix, changez le fichier de configuration de dockerd, définissez-le sur 0.0.0.0.2375 et conservez la ligne dans bash car elle est présent ou définissez-le sur 0.0.0.0:2375.