Le service Docker est clairement en cours d'exécution:
$ 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 la configuration Docker par défaut , c'est-à-dire que je n'ai pas changé les files /etc
relatifs à ce service.
Quel pourrait être le problème ici?
Vous devez vous append au groupe de docker
et activer le groupe (en vous déconnectant et en newgrp docker
à nouveau ou en exécutant newgrp docker
) pour exécuter des commands docker
. Le message d'erreur est 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 dissortingbution comme Fedora ou Ubuntu, Docker utilise un file de socket pour communiquer. Lorsque vous exécutez des commands docker
, il utilise cette socket pour parler au démon Docker. Bien sûr, le démon doit être en cours d'exécution (il est souvent désactivé par défaut), mais si votre user ne peut pas accéder au socket, il ne pourra pas non plus communiquer avec le démon.
Vous devez d'abord installer Docker depuis le référentiel de la dissortingbution. Certaines personnes téléchargent un script d'installation et l'installent dans un shell ( curl ... | sh
), mais il est recommandé de l'installer depuis le référentiel pour pouvoir le mettre à 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 voulez utiliser Docker, le démon doit être en cours d'exécution.
Activez-le (il sera donc lancé 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 user régulier ne peut pas parler au démon docker. Un user régulier n'a pas les permissions suffisantes pour accéder à la socket. Il ne peut pas atteindre le démon, donc il suppose qu'il ne fonctionne pas et affiche cette erreur: Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
C'est pourquoi beaucoup de gens commencent simplement toutes les commands 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 file socket appartient à root.
Dans certains cas, ce groupe avait un autre nom, 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 user y figure), vous devez configurer Docker pour l'utiliser:
Dans /etc/sysconfig/docker
, ajoutez -G dockerroot
(note: c'est une solution de contournement, pas la meilleure solution):
OPTIONS='--selinux-enabled -G dockerroot'
Après le redémarrage du démon, votre user 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 façon officielle serait d'utiliser le groupe appelé docker
. S'il existe, Docker l'utilisera automatiquement, c'est-à-dire qu'il définira le groupe de la 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 file socket sera la propriété de ce groupe:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Votre user 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 users approuvés 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 users de confiance devraient être dans le groupe de wheel
.)
sudo usermod -aG docker [nom d'user]
puis déconnectez-vous puis reconnectez-vous
Après avoir fait quelques searchs 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 l'installation de Docker:
Un user doit être ajouté au groupe de dockers.
$> sudo usermod -aG docker
Le démon docker doit être démarré
$> sudo service docker start
Vous pouvez définir le démon pour démarrer 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
Si vous utilisez la variante Fedora 23 ou Redhat, éditez /etc/sysconfig/docker
et modifiez les éléments suivants
OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'
Redémarrer le docker.
Assurez-vous d'append ce groupe au système et de vous append au groupe.
Cette command 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 users non root d'exécuter Docker dans CentOS, Fedora ou RHEL
J'ai aussi 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 docker-client sur docker.sock Vous pouvez le définir en utilisant sudo usermod -aG docker $USER
Ensuite, vérifiez votre file bash où le docker-client est en cours d'exécution. Pour moi, il a été mis à 0.0.0.0:2375, tandis que docker-daemon fonctionnait sur un socket Unix. (Il a été mis dans le file de configuration de dockerd).
Il suffit de commenter la ligne offensante et cela fonctionnera bien.
Mais si vous voulez le faire fonctionner sur un port TCP au lieu d'un socket unix, changez le file de configuration de dockerd, mettez-le à 0.0.0.0.2375 et gardez la ligne dans bash telle quelle ou si elle est présente ou mettez-la à 0.0. 0,0: 2375.
Si vous avez démarré votre moteur docker avec: sudo service docker start
vous ne pouvez pas vous connecter avec un user normal même si vous vous êtes ajouté au groupe "docker".
Vous pouvez simplement l'arrêter avec: arrêt docker service sudo
et lancez-le en tant qu'user normal: démarrage du docker de service
Voici les étapes que j'ai suivies pour réparer les éléments suivants
$ 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 de dockers
usermod -aG docker $USER
Corriger les permissions sur le socker et la command docker.
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 à l'environnement de configuration pour la command docker
export DOCKER_HOST=unix:///var/run/docker.sock
Rest Docker
sudo systemctl restart docker