La commande Docker ne peut pas se connecter au démon Docker

246

Je veux passer à Docker, donc je viens de commencer à jouer avec. J'ai installé Docker sur une installation VirtualBox Ubuntu 15.10 (Wily Werewolf) et comme suggéré ici, j'ai ensuite essayé d'exécuter une image Docker nginx de base :

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

J'ai donc vérifié si Docker était en cours d'exécution:

$ sudo service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           └─7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

Cela suggère que le démon Docker est en fait déjà en cours d'exécution, mais pour être sûr que je viens de démarrer le démon Docker manuellement:

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0

J'ai ensuite essayé de relancer l'image, mais avec le même résultat:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

J'ai essayé de lancer la commande, mais en vain. Qu'est-ce que je fais mal ici?

kramer65
la source
1
même problème. Je suis sur Ubuntu 15.10 aussi :(
Daniel Loureiro
1
même problème, ubuntu 15.10
Lucas Tettamanti
1
Redémarrez simplement votre service docker, c'est tout. Merci @jim <pre> redémarrage du docker du service sudo </pre>
Nasruddin
1
Nasruddin, ça n'a PAS marché pour moi ... :-(
Rafael_Espericueta
1
J'ai dû redémarrer la machine pour la faire fonctionner.
romaroma

Réponses:

443

Vous devez ajouter votre utilisateur actuel au groupe de dockers comme suit:

sudo usermod -aG docker $(whoami)

puis déconnectez-vous et reconnectez-vous au système ou redémarrez le système. tester pardocker version

pour plus d'informations sur l'installation du moteur Docker, suivez la documentation Docker

Zubair Alam
la source
idiot mais cela a fonctionné pour moi aussi @RobinLoxley, cela devrait être une réponse réelle et pas seulement un commentaire, faites le moi savoir si vous le postez, je vous donnerai un upvote;)
benka
9
Je voudrais souligner "se déconnecter et se reconnecter au système ou redémarrer le système"
Michele
3
La réponse @Junaid ci-dessous montre comment éviter l'étape de déconnexion / connexion, au cas où vous êtes, comme moi, si paresseux que vous ne voulez pas redémarrer vos applications;)
brandizzi
C'est exactement ce qui est mentionné dans le didacticiel Docker, mais la déconnexion et la reconnexion n'ont pas fonctionné pour moi. J'ai dû redémarrer le système pour le faire fonctionner.
aalaap
4
Je vois des informations sur la version de docker, mais à la fin de la sortie, je voisCannot connect to the Docker daemon. Is the docker daemon running on this host?
ghanbari
137

Ajouter l'utilisateur au groupe de dockers

  • Ajoutez le groupe de dockers s'il n'existe pas déjà:

    sudo groupadd docker

  • Ajoutez l'utilisateur connecté "$ {USER}" au groupe de dockers:

    sudo gpasswd -a ${USER} docker

  • Redémarrez le démon Docker:

    sudo service docker restart

  • Faites un newgrp dockerou déconnectez-vous pour activer les modifications apportées aux groupes.

néo
la source
1
Il semble que ce newgrp dockersoit local au shell, pas à la session de connexion. Cela ne ressort pas du tout de la page de manuel.
bergey
1
A travaillé pour moi. Merci!
Apokai
La seule réponse qui a fonctionné! Sur une machine Linux cloud privé, et cela fonctionnait toujours!
Meghna Natraj
A travaillé sur Ubuntu 18.04! Merci
Kshitij Saraogi
33

Habituellement, la commande suivante fait l'affaire:

sudo service docker restart

Ceci, au lieu des docker startcas où Docker semble déjà fonctionner.

Si cela fonctionne, comme suggéré et dans une autre réponse et sur ce problème GitHub , si vous ne vous êtes pas ajouté dans le groupe docker, faites-le en exécutant:

sudo usermod -aG docker <your-username> 

Et vous êtes probablement prêt à partir.


En ce qui concerne quiconque se heurte à cela, dans le docker de certains systèmes d'exploitation ne démarre pas juste après son installation et, par conséquent, la même chose can't connect to daemon messageapparaît. Dans ce cas, vous pouvez d'abord vérifier que Docker ne fonctionne pas en vérifiant l'état de votre service Docker en exécutant:

sudo service docker status

Si la sortie ressemble à quelque chose comme: docker stop/waitingau lieu de docker start/running, process 15378cela, cela signifie évidemment que Docker n'est pas actif. Dans ce cas, assurez-vous de le démarrer avec:

sudo service docker start

Et, comme auparavant, vous serez probablement prêt à partir.

Dimitris Fasarakis Hilliard
la source
18

note à moi-même: je reçois l'erreur du titre de la question quand j'oublie d'exécuter la dockercommande avec sudo:

sudo docker run ...

[Ubuntu 15.10]

Martin Vseticka
la source
12

J'ai eu le même problème et ce qui a fonctionné pour moi était:
Vérifier la propriété de /var/run/docker.sock

ls -l /var/run/docker.sock

Si vous n'êtes pas le propriétaire, changez de propriétaire avec la commande

sudo chown *your-username* /var/run/docker.sock

Ensuite, vous pouvez continuer et essayer d'exécuter les commandes du docker sans tracas: D

kevthanewversi
la source
2
Après avoir épuisé toutes les autres possibilités, c'est ce qui l'a fait fonctionner sur Sabayon / Gentoo Linux pour moi.
gerrit_hoekstra
Ce fichier appartient à rootmais en dockergroupe. La bonne approche consiste à affecter votre utilisateur actuel au dockergroupe, selon la documentation de Docker:sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante
9

Après avoir tout installé et démarré le service, essayez de fermer votre terminal et de l'ouvrir à nouveau, puis essayez de tirer votre image

Éditer

J'ai également eu ce problème à nouveau, si la solution ci-dessus ne fonctionne pas, essayez cette solution qui est la commande ci-dessous

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

Considérations

Si la commande ci-dessus fonctionne, vous rencontrez probablement des problèmes de docker réseau, de toute façon cela le résout, pour confirmer cela, consultez le journal avec la commande ci-dessous

tail -5f /var/log/upstart/docker.log

Si la sortie a quelque chose comme ça

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up

Vous êtes vraiment avec des problèmes de réseau, mais je ne sais pas encore si la prochaine fois que vous redémarrerez ( mise à jour , 2 mois sans problème à nouveau) votre système d'exploitation obtiendra à nouveau ce problème et s'il s'agit d'un bug ou d'un problème d'installation

Ma version docker

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64
deFreitas
la source
8

Après avoir installé Docker sur Ubuntu, j'ai exécuté la commande suivante:

sudo service docker start

L'as tu essayé?

yushulx
la source
6

J'ai eu le même problème. Je me bats depuis deux jours pour le résoudre.

Cela n'a fonctionné que lorsque j'ai fait:

  1. Selon le Tutoriel de Docker , vous devez ajouter la clé Docker si elle n'a pas déjà été ajoutée en utilisant:

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. Assurez-vous ensuite de vous accorder des privilèges de docker en utilisant:

    $ sudo usermod -aG docker $USER

J'espère que ça va t'aider aussi.

AmrMohallel
la source
2
L'étape 2 peut être simplifiée comme sudo usermod -aG docker $USER
suit
5

entrez en tant que root ( sudo su) et essayez ceci:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

J'ai le même problème ici, et la commande docker ne fonctionnait qu'en tant que root, et aussi avec cela DOCKER_HOST vide

PS: sachez également que la façon correcte et officielle d'installer sur Ubuntu est d'utiliser leurs dépôts apt (même le 15.10), pas avec ce truc " wget ".

Daniel Loureiro
la source
cette chose "wget" vient de mettre le dépôt docker dans votre source apt .... c'est à dire la même chose qu'on vous demande de faire manuellement de la "manière correcte et officielle" ....
Alar
1
J'ai bien peur que tu te trompes, Alar. La méthode "wget" ajoutera un référentiel docker dans votre source apt, ce qui est bien, mais cela fera aussi beaucoup d'autres mauvaises choses comme définir une var env DOCKER_HOST, ce qui empêchera docker de s'exécuter par défaut. Ce n'est pas parce que les deux méthodes ajoutent docker au référentiel qu'elles sont toutes les deux identiques.
Daniel Loureiro
5

Pour OSX :

Après avoir ouvert Docker et démarré la machine "par défaut" via le terminal de démarrage rapide ( https://docs.docker.com/engine/installation/mac/ ), vous essayez les commandes docker et obtenez ce message "impossible de se connecter au démon docker" , il s'avère que vous avez besoin d'un ensemble de variables env :

eval "$(docker-machine env default)"

Essayez ensuite avec docker run hello-worldpour voir si tout est pêche.

Danny
la source
5

Pour ceux qui ont déjà essayé de redémarrer votre machine, en désactivant la variable d'environnement DOCKER_HOST comme indiqué dans la documentation de docker env et tout le reste, essayez simplement d'utiliser le

sudo service docker restart

Seulement cela a fait l'affaire pour moi même après avoir redémarré la machine.

Mr.Moe
la source
2
Ceci est nécessaire si vous ne vous déconnectez et ne vous connectez que.
Zhang LongQI
4

Donner un accès non root - depuis docker

Ajoutez le groupe de dockers s'il n'existe pas déjà.

$ sudo groupadd docker

Ajoutez l'utilisateur connecté "$ {USER}" au groupe de dockers.

Modifiez le nom d'utilisateur pour qu'il corresponde à votre utilisateur préféré.

Vous devrez peut-être vous déconnecter et vous reconnecter pour que cela prenne effet.

$ sudo gpasswd -a ${USER} docker

Redémarrez le démon Docker.

$ sudo service docker restart
Eduardo Marín Izquierdo
la source
3

Cette question est actuellement numéro 3 sur une recherche Google. 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. Le message d'origine indique que le problème est sur Ubuntu, mais j'ai également rencontré le problème en utilisant Fedora. Dans cet esprit, 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
Ronald Weidner
la source
Sur Fedora 23, ce groupe peut être appelé dockerroot. En outre, vous souhaiterez probablement l'installer à partir du référentiel (au lieu de curl ... | sh) afin qu'il puisse être mis à jour plus tard:dnf install docker
basic6
beaucoup n'ont pas de groupe "docker", nous devons donc l'ajouter d'abord groupadd dockerpuis l'ajouter à votre nom d'utilisateursudo usermod -aG docker your_username
TonyTony
2

Essayez d'utiliser "sudo" avec la commande que vous exécutez.

user3737461
la source
"J'ai essayé de lancer la commande, mais en vain. Est-ce que quelqu'un sait ce que je fais mal ici? Tous les conseils sont les bienvenus!"
RhinoDevel
2

J'ai le même problème lors de l'exécution de Docker.

vous pouvez exécuter des commandes en tant qu'utilisateur sudo :

sudo docker ***your command here***
Dadaso Zanzane
la source
2

Pour Ubuntu: est
arrivé avec moi lorsque j'ai mis à jour docker.
Vous devez démasquer le service et le socket, puis redémarrer le service.

Les suivants ont fonctionné pour moi:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

Ce qui s'est passé dans les coulisses
systemd a également la possibilité de marquer une unité comme complètement impossible à démarrer, automatiquement ou manuellement, en la liant à / dev / null. Cela s'appelle masquer l'unité et est possible avec la commande mask.

sudo systemctl mask docker.service

Vous pouvez consulter la liste des services masqués en utilisant:

sudo systemctl list-unit-files

Sortie des fichiers d'unités de liste sudo systemctl

Pour activer le démarrage automatique / manuel du service, vous devez le démasquer en utilisant:

sudo sytemctl unmask docker.service

Maintenant, le service sera activé comme indiqué ci-dessous entrez la description de l'image ici

lordzuko
la source
1

Comme docker se lie à un socket Unix qui appartient à root lors du démarrage, l'utilisation de 'sudo' avec les commandes docker fonctionnera.

raja
la source
1
  1. J'ai également eu le même problème. Le problème était dans les sockets allouées à docker-daemon et docker-client.
  2. Tout d'abord, l'autorisation n'a pas été définie pour le client docker sur docker.sock Vous pouvez le définir à l'aide de "sudo usermod -aG docker $ USER"
  3. Ensuite, vérifiez votre fichier bash où le docker-client est en cours d'exécution, pour moi, il était sur 0.0.0.0:2375, alors que le docker-daemon fonctionnait sur un socket Unix (il a été défini dans le fichier de configuration de dockerd).
  4. Il suffit de commenter la ligne bash et cela fonctionnera bien.
  5. Mais si vous voulez le faire fonctionner sur le port TCP au lieu du socket Unix, changez le fichier de configuration de dockerd et définissez-le sur 0.0.0.0.2375 et gardez la ligne en bash telle qu'elle est si présente ou définissez-la sur 0.0.0.0: 2375.
Nilesh Kande
la source
1

Peut-être que cela aidera quelqu'un, car le message d'erreur est extrêmement inutile et j'ai parcouru toutes les étapes d'autorisation standard plusieurs fois en vain.

Docker laisse parfois des variables d'environnement fantômes en place qui bloquent l'accès, bien que votre système soit correctement configuré. Les commandes shell suivantes peuvent le rendre à nouveau accessible, si vous l'avez exécuté à un moment donné et qu'il a juste cessé de coopérer après un redémarrage:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

J'avais une installation de docker qui fonctionnait auparavant, et après avoir redémarré mon ordinateur portable, il a simplement refusé de fonctionner. A été correctement ajouté au groupe d'utilisateurs de docker, a les autorisations correctes sur le socket, etc, mais ne pouvait toujours pas courir docker login, docker run ...etc. Ce qu'il fixe pour moi. Malheureusement, je dois l'exécuter à chaque redémarrage. Ceci est mentionné sur quelques problèmes de github également comme solution de contournement, bien qu'il semble être un bug qu'il s'agit d'une barrière persistante au bon fonctionnement de Docker (remarque: je suis sur Arch Linux, pas OSX, mais c'était le même problème pour moi).

mopsyd
la source
1

Testé dans Ubuntu 16.04

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart
Thiago Falcao
la source
0

J'ai rencontré la même erreur sur l'instance Amazon EC2. Le problème a été résolu après le redémarrage de l'instance.

Sumit Bhoyar
la source
0

Ajouter l'utilisateur actuel au groupe de dockers:

sudo usermod -aG docker $(whoami)

BALAJI POTHULA
la source
Veuillez formater ceci en tant que code! Et expliquez cette commande. Et utilisez les --versions longues (en commençant par ) des options.
buhtz
0

Pour Ubuntu 16.04

/lib/systemd/system/docker.serviceChangement de fichier interne:

ExecStart=/usr/bin/dockerd fd://

avec:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

/etc/init.d/dockerChangement de fichier interne:

DOCKER_OPTS=

avec:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

puis redémarrez votre ordinateur.

user6646280
la source