La commande Docker ne peut pas se connecter au démon Docker
Je veux faire un mouvement à Docker, donc je viens de commencer à jouer avec elle. 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 de base nginx :
$ 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 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 alors essayé exécuter à nouveau 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é sudo ' ING la commande, mais en vain. Ce que je fais mal ici?
23 réponses
Vous devez ajouter votre utilisateur actuel [supposons que vous êtes connecté en tant qu'ubuntu] pour docker groupe comme suit
sudo usermod -aG docker $(whoami)
Puis déconnexion et connexion à nouveau dans le système ou redémarrez le système.
test par docker version
Pour plus d'informations sur l'installation du moteur Docker, suivez la documentation docker
Ajoute l'utilisateur au groupe docker
-
Ajoutez le groupe docker s'il n'existe pas déjà:
sudo groupadd docker
-
Ajoute l'utilisateur connecté "${USER} " au groupe docker:
sudo gpasswd -a ${USER} docker
-
Redémarrez le démon Docker:
sudo service docker restart
Faites un
newgrp docker
ou déconnectez - vous/pour activer les modifications à groupe.
Habituellement, la commande suivante fait l'affaire:
sudo service docker restart
Ceci, au lieu de docker start
pour les cas où Docker semble déjà être en cours d'exécution.
Si cela fonctionne alors, 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.
Comme pour quiconque se heurte à cela, dans le docker de certains OS ne démarre pas juste après l'avoir installé et, par conséquent, le même can't connect to daemon message
apparaît. Dans ce cas, vous pouvez d'abord vérifier que Docker n'est pas en cours d'exécution 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/waiting
au lieu de docker start/running, process 15378
alors cela signifie évidemment que Docker n'est pas actif. Dans ce cas, assurez-vous de commencer par:
sudo service docker start
Et, comme avant, vous serez probablement prêt à partir.
Note à self: je reçois l'erreur du titre de la question quand j'oublie d'exécuter la commande docker
avec sudo
:
sudo docker run ...
[Ubuntu 15.10]
Avait le même problème et ce qui a fonctionné pour moi était:
La vérification de la propriété de /var/run/docker.chaussette
ls -l /var/run/docker.sock
Si vous n'êtes pas le propriétaire, Modifiez la propriété avec la commande
sudo chown *your-username* /var/run/docker.sock
Ensuite, vous pouvez aller de l'avant et essayer d'exécuter les commandes Docker sans tracas: d
Après tout installer et démarrer le service, essayez de fermer votre terminal et ouvrez-le à nouveau, puis essayez de tirer votre image
Modifier
J'ai aussi eu ce problème encore une fois, si la solution ci-dessus ne fonctionne pas, essayez Cette solution {[12] } c'est la commande ci-dessous
sudo mv /var/lib/docker/network/files/ /tmp/dn-bak
Considérations
Si la commande ci-dessus fonctionne, vous êtes probablement avec des problèmes de docker réseau, de toute façon cela le résout, pour confirmer cela, voir 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émarrez ( update , 2 mois sans problème à nouveau) votre OS {[10] } obtiendra ce problème à nouveau 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
Après avoir installé Docker sur Ubuntu, j'ai exécuté la commande suivante:
sudo service docker start
L'avez-vous essayé?
J'ai eu le même problème. J'ai lutté pendant deux jours pour le résoudre.
Cela n'a fonctionné que quand je l'ai fait:
-
Selon le tutoriel Docker , vous devez ajouter la clé Docker si elle n'est pas déjà ajoutée en utilisant:
$ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -
-
Ensuite, assurez-vous de vous accorder des privilèges docker en utilisant:
$ sudo usermod -aG docker $USER
J'espère que cela vous aidera aussi.
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 que comme root, et aussi avec ceci DOCKER_HOST
empty
PS: méfiez-vous également que la façon correcte et officielle d'installer sur Ubuntu est d'utiliser leurs dépôts apt (même sur 15.10), pas avec cette chose" wget".
Pour OSX:
Après avoir ouvert docker et démarré la machine 'default' via le Terminal Quickstart ( 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 de variables env définies :
eval "$(docker-machine env default)"
Puis essayer avec docker run hello-world
pour voir si tout est peachy.
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 original 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 l'installation de Docker:
, Un utilisateur doit être ajouté au menu fixe groupe.
$> sudo usermod -aG docker
Le démon docker doit être démarré
$> sudo service docker start
, Vous pouvez définir le démon 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 un dernier contrôle final
$> docker run hello-world
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 Docker env et tout le reste essaie juste d'aller avec le
sudo service docker restart
Seulement cela a fait l'affaire pour moi même après avoir redémarré la machine.
Donner un accès non root-à partir de docker
Ajoutez le groupe docker s'il n'existe pas déjà.
$ sudo groupadd docker
Ajoutez l'utilisateur connecté "${USER} " au groupe docker.
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 ceci pour prendre effet.
$ sudo gpasswd -a ${USER} docker
Redémarrez le démon Docker.
$ sudo service docker restart
Essayez d'utiliser "sudo" avec la commande que vous exécutez.
J'ai le même problème lors de l'exécution de docker.
, Vous pouvez exécuter des commandes en tant que sudo utilisateur:
sudo docker ***your command here***
Pour Ubuntu:
Arrivé avec moi quand j'ai mis à jour docker.
Vous devez démasquer le service et le socket, puis redémarrer le service.
Suivant a travaillé 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 non démarrable, automatiquement ou manuellement, en la reliant à /dev/null. Ceci est appelé masquage de l'unité, et est possible avec la commande mask.
sudo systemctl mask docker.service
, Vous pouvez consulter la liste des services masqués utilisant:
sudo systemctl list-unit-files
Pour activer le démarrage Automatique / Manuel du service, vous devez le démasquer en utilisant:
sudo sytemctl unmask docker.service
Comme docker se lie à un socket unix qui appartient à root lors du démarrage, l'utilisation de 'sudo' avec les commandes docker fonctionnera.
- j'ai aussi eu le même problème. Le problème était dans les sockets alloués à Docker-daemon et Docker-client.
- Tout d'abord, l'autorisation n'a pas été définie pour le client docker sur docker.chaussette vous pouvez le définir en utilisant "sudo usermod-aG Docker $ USER"
- Ensuite, vérifiez votre fichier bash où le docker-client est en cours d'exécution, pour moi c'était sur 0.0.0.0: 2375, alors que Docker-daemon était en cours d'exécution sur le socket unix.(Il a été défini dans le fichier de configuration de dockerd).
- commentez simplement la ligne bash et cela fonctionnera fin.
- mais si vous voulez le faire fonctionner sur le port TCP au lieu du socket unix, modifiez le fichier de configuration de dockerd et définissez-le sur 0.0.0.0.2375 et gardez la ligne dans bash telle quelle si elle est présente ou définissez-la sur 0.0.0.0: 2375.
J'ai fait face à la même erreur sur L'instance Amazon EC2. Le problème a été corrigé après le redémarrage de l'instance.
Ajouter l'utilisateur actuel au groupe docker:
sudo usermod -aG docker $(whoami)
Pour Ubuntu 16.04
Dans le fichier /lib/systemd/system/docker.service
modifier:
ExecStart=/usr/bin/dockerd fd://
Avec:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375
Dans le fichier /etc/init.d/docker
modifier:
DOCKER_OPTS=
Avec:
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
, puis redémarrez votre ordinateur.
Peut-être que cela aidera quelqu'un, car le message d'erreur est extrêmement inutile, et j'avais traversé toutes les étapes d'autorisation standard plusieurs fois en vain.
Docker laisse parfois des variables d'environnement ghost en place qui bloquent l'accès, bien que votre système soit correctement configuré. Les commandes shell suivantes peuvent le rendre accessible à nouveau, si vous l'avez fait fonctionner à 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'ai eu un ancien docker installer, et après avoir redémarré mon ordinateur portable il a simplement refusé de travailler. A bien été ajouté au panneau de l'utilisateur groupe, avait les autorisations correctes sur le socket, etc, mais ne pouvait toujours pas s'exécuter docker login
, docker run ...
, etc. Ce fixe pour moi. Malheureusement, je dois l'exécuter à chaque redémarrage. Ceci est mentionné sur quelques problèmes github aussi comme une solution de contournement, bien qu'il semble être un bug que c'est une barrière persistante pour corriger le fonctionnement de Docker (note: je suis sur Arch Linux, pas OSX, mais c'était le même problème pour moi).
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