Docker-Compose ne peut pas se connecter à Docker Daemon

114

Je reçois un message d'erreur indiquant que je ne peux pas me connecter au démon docker. J'ai examiné les réponses d'autres personnes qui ont eu des problèmes similaires, mais cela n'a pas aidé. J'utilise la version d'Ubuntu 15.10. Je vais essayer de fournir toutes les informations dont je dispose.

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Version Docker

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Version de Docker-Compose

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

C'est ce qui se passe si j'essaye d'arrêter ou de démarrer le service ...

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

Si je cours ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

Toute aide serait grandement appréciée. Faites-moi savoir si vous pourriez avoir besoin de plus d'informations.

Daveskylark
la source
1
Veuillez ne pas vandaliser vos messages. Une fois que vous avez publié une question, vous avez accordé une licence au contenu à la communauté Stack Overflow dans son ensemble (sous la licence CC-by-SA). Si vous souhaitez dissocier ce message de votre compte, voir Quel est le chemin approprié pour une demande de dissociation? .
Bugs

Réponses:

269

J'ai eu la même erreur, après 15 min de débogage. Il s'avère que tout ce dont il a besoin est de sudo:) Vérifiez [Créer un groupe Docker] ici https://docs.docker.com/engine/installation/linux/ubuntulinux/ pour vous débarrasser du préfixe sudo.

Mahmoud Zalt
la source
35
Ils ont besoin d'une meilleure erreur = / Cette question a été vue 13000 fois
Jonathan
4
mec, vous avez économisé environ 30 heures uniquement pour ceux qui ont voté et ce n'est probablement que 1% du temps que vous avez effectivement économisé
vak
5
le vrai correctif est de créer le groupe docker, alors que le sudon'est qu'une solution de contournement / hack, à mon avis. comme la partie de création de groupe n'est pas expliquée ici, seul un lien est donné, et le contenu de ce lien a changé, je considère cela comme une réponse de lien uniquement, et il est maintenant essentiellement inutile (pour la partie de correctif réel). pourriez-vous peut-être ajouter la description de la façon d'ajouter ce groupe?
hoijui
2
Je pense que sudoc'est aussi une mauvaise idée. Consultez la documentation Docker pour gérer Docker en tant qu'utilisateur non root: docs.docker.com/engine/installation/linux/linux-postinstall
...
6
En gros, tout ce que vous avez à faire est sudo usermod -aG docker $USER, et cela fonctionnera par la suite.
user2340939
65

J'ai eu ce problème et je ne voulais pas gâcher les choses en utilisant sudo. Lors de l'enquête, j'ai essayé d'obtenir des informations:

docker info

Étonnamment, j'ai eu l'erreur suivante:

Obtention de l'autorisation refusée lors de la tentative de connexion au socket du démon Docker sous unix: ///var/run/docker.sock: Obtenez http: ///var/run/docker.sock/v1.38/info : composez unix / var /run/docker.sock: connect: permission refusée

Pour une raison quelconque, je n'avais pas assez de privilèges, la commande suivante a résolu mon problème:

sudo chown $USER /var/run/docker.sock

Et voilà !

madjaoue
la source
Et après le redémarrage de Docker? On doit refaire ça?
Light.G
Non, cela devrait fonctionner lorsque vous redémarrez le docker. Mais je ne suis pas sûr de ce qui se passe si vous redémarrez votre machine.
madjaoue
Par défaut, Docker tiendrait docker.sockavec un groupe non racine, dockerpar défaut. Mais nous pourrions changer cela par -Gindicateur lors de l'initialisation du démon Docker. Dans mon cas, j'ajoute un groupe pour $USERNAME, signifie ajouter un groupe docker, puis redémarrer ma machine (ubuntu 16.04, PC). Ça marche bien. Et cela est recommandé dans la documentation de docker.
Light.G
3
Fonctionne aussi pour moi :)
Kamil J.
27

Il semble que votre problème ait été créé par un ancien bogue de Docker, où le fichier de socket n'a pas été recréé après le plantage de Docker. Si tel est le problème, renommer le fichier socket devrait lui permettre d'être recréé:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

Puisque ce bogue est corrigé, la plupart des personnes qui obtiennent l'erreur l' Couldn't connect to Docker daemonobtiennent probablement parce qu'elles ne sont pas dans le dockergroupe et n'ont pas les autorisations pour lire ce fichier. Courir avec sudo docker ...résoudra cela, mais ce n'est pas une excellente solution.

Docker peut être exécuté en tant qu'utilisateur non root (sans sudo) disposant des autorisations de groupe appropriées. La documentation de post-installation Linux contient les détails. La version courte:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

Cela permet aux utilisateurs du dockergroupe de s'exécuter dockeret aux docker-composecommandes sans sudo. Docker lui-même exécute une racine, permettant certaines attaques, vous devez donc toujours faire attention aux conteneurs que vous exécutez. Consultez la documentation sur la sécurité de Docker pour plus de détails.

jwhitlock
la source
Cette question est spécifique à l'installation Linux, et le correctif implique des modifications sur le système hôte Linux pour le résoudre. Vous obtiendrez de meilleures informations si vous postez une question similaire avec les mêmes détails mais pour Windows. Pour vous résoudre vous-même, je vous recommande de lire attentivement la documentation de Docker pour Windows
jwhitlock
10

J'ai eu le même problème. Après avoir pris des notes et analysé certains résultats de débogage, j'ai finalement résolu ce qui peut être la même erreur. Démarrez d'abord le service,

service docker start

N'oubliez pas d'inclure votre utilisateur dans le groupe Docker.

RA
la source
J'étais en cours d'exécution en tant que root lorsque j'ai rencontré cette erreur. Semblait comme sudoréparé pour les autres -_- Heureux de constater que c'était bien cela, que j'avais oublié de faire. Si simple!
Will
8

Vous devez ajouter votre utilisateur au groupe "docker" avec quelque chose comme:

sudo usermod -aG docker $ {USER}

zhiiker
la source
5

J'ai eu cette erreur lorsqu'il y avait des fichiers dans le Dockerfilerépertoire qui n'étaient pas accessibles par l'utilisateur actuel. dockerne pouvait donc pas télécharger le contexte complet vers le démon et a apporté le message « Impossible de se connecter au démon Docker à http + docker: // localunixsocket ».

cweiske
la source
2
Merci! Cela a résolu le problème pour moi. Facile à vérifier, car toutes les commandes de docker fonctionnaient, mais pas docker-compose. Docker-compose également travaillé dans un autre répertoire. Message d'erreur très trompeur, BTW.
Csongor Fagyal
1
Cela devrait vraiment être plus haut
Arlen Anderson
1
Merci! travaillé pour moi. L'utilisation docker build .entraînera des problèmes de permission.
everyman
La seule chose qui a fonctionné - pourquoi les messages d'erreur Docker sont-ils si mauvais? Merci!
coderMe le
4

Une façon de résoudre ce problème serait d'ajouter d'abord votre utilisateur au dockergroupe en exécutant la commande suivante

sudo usermod -aG docker $USER

IMPORTANT: n'oubliez pas de vous déconnecter de votre système (pas seulement de votre terminal) et de vous reconnecter pour que cela prenne effet!

arunavkonwar
la source
sudo usermod -aG docker $ {USER} Nous devons également nous déconnecter et nous connecter pour appliquer les modifications: su - $ {USER}
user3785966
3

D'après la sortie de "ps aux | grep docker", il semble que le démon docker ne fonctionne pas. Essayez d'utiliser les méthodes ci-dessous pour voir ce qui ne va pas et pourquoi docker ne démarre pas

  1. Vérifiez les journaux du docker

$ sudo tail -f /var/log/upstart/docker.log

  1. Essayez de démarrer Docker en mode débogage

$ sudo docker -d -D

Manish R
la source
2

Dans mon cas, votre service docker pourrait être arrêté

Commande pour démarrer le service docker:

$ sudo systemctl start docker

Commande pour vérifier si elle démarre:

$ sudo docker run hello-world

John_J
la source
2

Une autre raison pour laquelle cette erreur peut apparaître: pour moi, c'était une définition de chemin d'image mal formée dans le docker-compose.yml:

  service:
    image: ${CONTAINER_REGISTRY_BASE}/my-service
   ...

Lookis ok'ish d'abord, mais j'avais CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/mis sur l'environnement. Apparemment, le //chemin d'accès à l'image a causé cette erreur.

docker-compose: v.1.21.2
docker: 18.03.1-ce
Leberknecht
la source
2

essayez juste avec sudo. Cela semble être un problème de permission!

sudo docker-compose -f docker-compose-deps.yml up -d

cela a fonctionné pour moi.

Démobilisateur
la source
1

J'ai utilisé Ubuntu 16.04 et j'ai également trouvé ce problème lorsque j'ai utilisé docker-compose. Je l'ai corrigé en exécutant cette commande.

$ sudo systemctl start docker
$ sudo docker-compose build
Khachornchit Songsaen
la source
1

Y a-t-il une légère possibilité que vous ayez supprimé la machine par défaut? Mais, vérifiez d'abord si tous les fichiers sont là (OSX, similaire sur d'autres systèmes)

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

Installez également l'application Docker, car il est beaucoup plus facile de gérer les conteneurs:

brew cask reinstall docker

et lancez l'application Docker à partir du Finder (attendez que le service soit complètement démarré)

Ensuite, vérifiez l'installation avec:

docker-machine ls

si aucune machine n'est présente dans la liste, créez-en une et démarrez-la:

docker-machine create default
docker-machine start default

Après cela, build, compose et toutes les autres commandes devraient fonctionner correctement.

rapace
la source
1

dans mon cas c'est parce que la permission ubuntu,

  1. Élément de liste

vérifier l'autorisation par

docker info 

s'ils impriment l'autorisation de problème, entrez la description de l'image ici utilisez

sudo chmod -R 777 /var/run/docker.sock
Joe-khoa
la source
0

Pour moi, le correctif consistait à installer une version plus récente (1.24) de l' docker-composeutilisation de cet article .

La version précédente (1.17) a été installée à partir ubuntudu référentiel par défaut, mais après avoir installé une version plus récente, j'ai réussi à lancer le conteneur. J'espère que ça aide quelqu'un.

Artyom Ilyin
la source
0

Je pense que c'est à cause du droit d'accès, il suffit d'écrire

sudo docker-compose-deps.yml up
Moustapha Berrou
la source
-1

Dans mon cas, j'ai la même erreur lorsque j'essaye docker-compose build et ma solution était juste d'ajoutersudo

sudo docker-compose build
Andrey Suglobov
la source
-2

J'ai trouvé cela et cela a semblé résoudre mon problème.

GitHub Corrige le crash du démon Docker

J'ai changé le contenu de mon fichier docker-compose-deps.yml comme indiqué dans le lien. Puis j'ai couru docker-compose -f docker-compose-deps.yml up -d. Ensuite, je l'ai changé et cela a fonctionné pour une raison quelconque. Je n'ai pas eu à continuer les étapes du lien que j'ai fourni, mais les deux premières étapes ont résolu le problème pour moi.

Daveskylark
la source
2
ubuntu 16.04: il suffit d'ajouter sudo: sudo docker-compose up -d
Moccine
Ce n'est pas suffisant comme réponse. Si vous souhaitez accepter votre propre réponse, vous devez indiquer la raison même de votre problème. Sinon, ce serait vraiment trompeur pour les autres. BTW, il y a d'autres réponses ici, ont-ils aidé? Puisque je n'ai vu aucun commentaire de votre part.
Light.G