Pourquoi j'obtiens "Impossible de se connecter au démon Docker" lorsque le démon est en cours d'exécution?

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.

  1. 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

  2. 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).

  3. Il suffit de commenter la ligne offensante et cela fonctionnera bien.

  4. 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? 
  1. Ajoutez-vous au groupe de dockers

    usermod -aG docker $USER

  2. 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

  3. Ajouter des variables à l'environnement de configuration pour la command docker

    export DOCKER_HOST=unix:///var/run/docker.sock

  4. Rest Docker

    sudo systemctl restart docker