Impossible de se connecter à docker à partir de docker-compose


163

J'ai installé docker-machine 0.1.0 et docker-compose 1.1.0 sur Mac OS 10.8.5.
Docker-machine fonctionne normalement et peut se connecter par docker-machine ssh.

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376   

Cependant, impossible de se connecter à partir de docker-compose.

$ docker-compose up

Impossible de se connecter au démon Docker à l'adresse http + unix: //var/run/docker.sock - est-il en cours d'exécution?

S'il se trouve à un emplacement non standard, spécifiez l'URL avec la variable d'environnement DOCKER_HOST.

Mon Dockerfile et docker-compose.yml sont ici.

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376

docker-compose.yml

web:
  build: .

Pourquoi ne peut pas se connecter? Des idées?


49
Fonctionne-t-il en docker-machinetant que root? Je viens de venir ici avec le même problème sur Ubuntu et c'était les autorisations sur le socket - a sudofait l'affaire.
SLD

7
Pour ceux sous Linux, vous devrez peut - être simplement être ajouté au groupe docker .
Batandwa

5
il suffit d'exécuter: sudo docker-compose up
Girish Gupta

J'ai eu le même problème. Vous devez redémarrer le docker. sudo service docker restartou sudo service docker startje l'ai résolu avec ça.
OM Bharatiya

Pour ceux qui utilisent Ubuntu, vous devez utiliser sudo et vous ne devez pas ajouter d'utilisateurs au groupe docker . Voir les commentaires dans la réponse acceptée: askubuntu.com/questions/477551/…
kas

Réponses:


89

La machine Docker est en cours d'exécution. Mais vous devez exporter un environnement pour vous connecter à la machine Docker. Par défaut, le dockerclient CLI tente de communiquer avec le démon en utilisant http+unix://var/run/docker.sock(comme indiqué dans le message d'erreur).

Exportez les variables d'environnement correctes à l'aide de eval $(docker-machine env dev), puis réessayez. Vous pouvez également simplement exécuter docker-machine env devpour voir les variables d'environnement qu'il exportera. Notez que l'un d'entre eux l'est DOCKER_HOST, tout comme le message d'erreur le suggère, vous devrez peut-être définir.


2
Vous pouvez mettre cette commande ( eval "$(docker-machine env default)") dans votre bin / postactivate pour vous assurer qu'elle est toujours à jour.
Dannid le

1
Où trouver le fichier bin / postactivate?
Lukas Schulze

Ou vous avez oublié d'installer le docker: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS

226

Solution simple pour moi: sudo docker-compose up


MISE À JOUR 2016-3-14: À un moment donné du processus d'installation de docker (ou docker-compose?), Il y a une suggestion et un exemple pour ajouter votre nom d'utilisateur au groupe «docker». Cela vous permet d'éviter d'avoir besoin de "sudo" avant toutes les commandes du docker, comme ceci:

~ > docker run -it ubuntu /bin/bash
root@665d1ea76b8d:/# date
Mon Mar 14 23:43:36 UTC 2016
root@665d1ea76b8d:/# exit
exit
~ > 

Regardez attentivement la sortie des commandes d'installation (docker et la 2ème installation pour docker-compose) et vous trouverez l'étape nécessaire. Il est également documenté ici: https://subosito.com/posts/docker-tips/

Sudo? Non!

Fatigué de taper sudo docker chaque fois que vous émettez une commande? Ouais, il y a un moyen de gérer ça. Bien que docker nécessite naturellement un utilisateur root, nous pouvons donner un groupe équivalent root pour les opérations de docker.

Vous pouvez créer un groupe appelé docker, puis ajouter l'utilisateur souhaité à ce groupe. Après avoir redémarré le service docker, l'utilisateur n'aura pas besoin de taper sudo à chaque fois qu'il effectue des opérations docker. À quoi cela ressemble-t-il sur une commande shell? en tant que racine, vous y allez:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 

Terminé!

MISE À JOUR 2017-3-9

Les instructions d' installation de Docker ont été mises à jour ici.

Étapes de post-installation pour Linux

Cette section contient des procédures facultatives pour configurer les hôtes Linux afin qu'ils fonctionnent mieux avec Docker.

Gérer Docker en tant qu'utilisateur non root

Le démon docker se lie à un socket Unix au lieu d'un port TCP. Par défaut, ce socket Unix appartient à l'utilisateur root et les autres utilisateurs ne peuvent y accéder qu'en utilisant sudo. Le démon docker s'exécute toujours en tant qu'utilisateur root.

Si vous ne souhaitez pas utiliser sudo lorsque vous utilisez la commande docker, créez un groupe Unix appelé docker et ajoutez-y des utilisateurs. Lorsque le démon docker démarre, il rend la propriété du socket Unix accessible en lecture / écriture par le groupe docker.

Pour créer le groupe Docker et ajouter votre utilisateur:

# 1. Create the docker group.
$ sudo groupadd docker

# 2. Add your user to the docker group.
$ sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without sudo.
$ docker run hello-world

Cette commande télécharge une image de test et l'exécute dans un conteneur. Lorsque le conteneur s'exécute, il imprime un message d'information et se ferme.


1
De même, pour une raison quelconque, sudo est le seul moyen de le faire fonctionner: O: O: O
Jamie Hutber

12
Au lieu de vous déconnecter ... vous pouvez utiliser la commande:newgrp docker
Thiago Falcao

Ahh réponse détaillée avec sous-question :-)
Sukumaar

1
Re: "Solution simple pour moi: sudo docker-compose up". Quand j'essaye ça, j'obtiens:sudo: docker-compose: command not found
mblakesley

38

Si vous avez commencé à utiliser docker sudo, vous devez exécuter docker-compose up avec sudo Like:sudo docker-compose up


Cela a fonctionné pour moi quand j'ai couru sudo docker-compose buildau lieu de docker-compose build.
anms_pro

26

Par défaut, le démon docker s'exécute toujours en tant qu'utilisateur root, vous devez donc ajouter sudovos commandes Docker.

Si vous ne souhaitez pas utiliser sudo lorsque vous utilisez la commande docker, créez un groupe Unix appelé docker et ajoutez-y des utilisateurs. Lorsque le démon docker démarre, il rend la propriété du socket Unix accessible en lecture / écriture par le groupe docker.

Pour créer le groupe Docker et ajouter votre utilisateur:

  1. Créez le groupe Docker.

    $ sudo groupadd docker

  2. Ajoutez votre utilisateur au groupe Docker.

    $ sudo usermod -aG docker $USER

  3. Déconnectez-vous et reconnectez-vous pour que votre appartenance à un groupe soit réévaluée.

  4. Vérifiez que vous pouvez docker les commandes sans sudo.

    $ docker run hello-world

Cette commande télécharge une image de test et l'exécute dans un conteneur. Lorsque le conteneur s'exécute, il imprime un message d'information et se ferme.

Les étapes décrites ci-dessus proviennent de la documentation officielle de Docker .


Comment pouvons-nous faire cela sur Windows installé Docker?
Jeff Cook le

En plus de cela, ce que j'ai fait pour réparer docker-compose était de définir l'utilisateur s'exécutant en docker-composetant que propriétaire de /usr/local/bin/docker-composepuis de redémarrer le service
Sam

groupl'abonnement peut être actualisé avec su - $USERpour économiser la déconnexion et la connexion
Stuart Cardall

20

Lorsque vous obtenez une erreur :

ERREUR: impossible de se connecter au démon Docker à l'adresse http + docker: // localhost - est-il en cours d'exécution?

La solution serait:

  1. Tout d'abord, essayez de vérifier que le service Docker est opérationnel comme prévu sur votre machine distante / locale:sudo service docker status

    sinon - exécutez sudo service docker start ou sudo systemctl start docker(dépend de certaines versions de Linux, consultez les instructions de démarrage de Docker ).

  2. Deuxièmement, démarrez docker en tant que sudo sudo docker-compose up


16

sudo systemctl start docker - pour démarrer le service Docker.

sudo docker-compose up après ça.

J'ai Fedora 26, et en essayant de résoudre le même problème, je suis finalement entré dans Docker Compose sur la page des développeurs Fedora , puis dans Docker sur la page des développeurs Fedora , ce qui m'a aidé.

Probablement, le service docker est considéré par la communauté comme commençant avec le système et fonctionnant en arrière-plan tout le temps, mais pour moi, ce n'était pas si évident, et c'est la raison pour laquelle je peux penser à l'absence de réponse populaire comme celle-ci.

Sur la page des développeurs de Fedora, il y a des instructions pour activer Docker pour démarrer avec le système:

sudo systemctl enable docker


Remplacez systemctlpar launchctlsi vous exécutez sur mac.
Rohit Swami

6

Si vous êtes sous Linux, vous ne l'avez peut-être pas docker-machineinstallé car il n'est installé par défaut que sur les ordinateurs Windows et Mac.

Si tel est le cas, vous devrez vous rendre sur: https://docs.docker.com/machine/install-machine/ pour trouver des instructions sur la façon de l'installer sur votre version de Linux.

Après l'installation, réessayez d'exécuter docker-compose upavant d'essayer tout ce qui est répertorié ci-dessus.

J'espère que cela aide quelqu'un. Cela a fonctionné pour mon installation devilbox dans Fedora 25.


5

Outre l'ajout d'utilisateurs au groupe docker, pour éviter de taper de manière sudorépétitive, vous pouvez également créer un alias pour des dockercommandes comme celle-ci:

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"

4

si vous utilisez docker-machine, vous devez activer l'environnement à l'aide de la variable env . au cas où vous n'utilisez pas docker-machine, exécutez vos commandes avec sudo


3

Quelqu'un a vérifié le journal?

Dans mon cas, le message d'erreur /var/log/upstart/docker.logétait:

Listening for HTTP on unix (/var/run/docker.sock) 
[graphdriver] using prior storage driver "aufs" 
Running modprobe bridge nf_nat failed with message: , error: exit status 1 
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0" 

Il vaut la peine de mentionner que j'avais activé VPN, donc: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start était la solution.


3

La réponse de @srfrnk fonctionne pour moi.

Dans ma situation, j'avais le prochain fichier docker-compose.yml:

  nginx:
    build:
      context: ./
      dockerfile: "./docker/nginx.staging/Dockerfile"
    depends_on:
      - scripts
    environment:
      NGINX_SERVER_NAME: "some.host"
      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_HOST: scripts
      NGINX_SERVER_ROOT: /var/www/html
    volumes:
      - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw
    ports:
      - 80:80

./docker-runtimepropriétaire et groupe - est rootlorsque l'autre propriétaire de fichiers - mon utilisateur. Quand j'ai essayé de construirenginx

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

J'ai ajouté ./docker-runtimeà .dockerignoreet il est résolu mon problème.


3

en cours d'exécution docker-compose pull- j'obtenais une erreur ci-dessous

ERREUR: impossible de se connecter au démon Docker sur http + docker: // localhost

est-ce que ça marche?

Solution -

sudo service docker start 

problème résolu


2

J'ai eu les mêmes symptômes.

Seulement diffère que cela ne s'est produit que pendant le docker-compose build docker pstravail. Arrivé avec la version 2.xainsi que 3.x. dockerService redémarré , puis la machine ... Même réinstallée docker+ docker-compose.

J'ai tout essayé mais rien n'a aidé.

Enfin, j'ai essayé de créer le Dockerfile "manuellement" en utilisant docker build.

Apparemment, j'ai eu un problème d'autorisation sur un fichier / dossier dans le Dockercontexte. Il essayait de lire le contexte lors du démarrage de la construction et a échoué avec un message d'erreur approprié. Cependant, ce message d'erreur ne s'est pas propagé à docker-composequi neCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Ayant trouvé que la solution était simplement d'ajouter le fichier / dossier au .dockerignorefichier car il n'était pas nécessaire pour la construction. Une autre solution aurait pu être chownou chmodcela.

Quoi qu'il en soit, cela pourrait aider quelqu'un à rencontrer le même problème qui n'a vraiment rien à voir avec dockerle message d'erreur trompeur affiché.


J'ai eu le même problème: les autorisations de fichiers dans un volume monté. Dans mon cas, j'avais un certificat SSL qui appartenait à root qui avait été placé dans un volume Docker. chown/ chmodcorrigé. Message d'erreur terrible mais ils y travaillent. Voir github.com/docker/compose/issues/5318
bcattle

2

$ sudo docker-compose up

J'ai suivi les étapes telles qu'elles figurent dans la réponse ci-dessus pour ajouter $ USER au menu fixe de groupe. Je ne voulais pas ajouter un nouveau menu fixe de groupe car dans mon installation de docker, un groupe nommé docker a été créé automatiquement.

Docker CE est installé et en cours d'exécution. Le groupe Docker est créé mais aucun utilisateur n'y est ajouté. Vous devez utiliser sudo pour exécuter les commandes Docker. Continuez vers la post-installation Linux pour permettre aux utilisateurs non privilégiés d'exécuter des commandes Docker et pour d'autres étapes de configuration facultatives.

mais l'utilisation de docker-compose up ne fonctionnait pas non plus. Il a donné la même erreur précédente. Donc, dans mon cas (Ubuntu 18.10), sudo docker-compose up a résolu le problème.

ps: @Tiw merci pour les conseils.


1
Il vaut peut-être mieux mettre la solution en premier et ceux qui l'expliquent en dessous. Vous pouvez également utiliser ces boutons sur l'éditeur pour mieux formater votre réponse.
Tiw

2

Je sais que c'est idiot, mais dans mon cas, j'ai juste essayé avec sudoet ça a fonctionné comme un charme.

dans votre cas, essayez: $ sudo docker-compose up


1

essaye ça:

sudo ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose


1

J'ai résolu le problème en suivant les étapes suivantes

$ sudo service docker status
$ sudo service docker start
$ sudo docker-compose up

maintenant docker-compose up fonctionne


0

Pour moi, j'ai commencé à mettre à jour Docker et à annuler à mi-chemin. Je n'ai pas remarqué que Docker ne fonctionnait pas (si c'était le cas, il y a une icône dans la barre de navigation supérieure de mon Macbook, par la batterie restante, le temps, etc.). Une fois que je l'ai lancé et terminé la mise à niveau, j'ai à docker-compose upnouveau travaillé!


0

Ma configuration a deux cas pour cette erreur:

  • __pycache__ les fichiers créés par l'utilisateur root après avoir exécuté des tests d'intégration à l'intérieur du conteneur sont inaccessibles pour docker (vous indique le problème d'origine) et docker-compose (vous parle de l'hôte de docker de manière ambiguë);
  • microk8s bloqué mon port jusqu'à ce que je l'arrête.


0

me déconnecter puis me reconnecter m'a aidé. Dans mon cas, il s'agissait d'une nouvelle installation, j'ai créé un nouvel utilisateur, un nouveau groupe puis ajouté l'utilisateur au groupe docker.

sortie sortie

puis ssh dans le serveur à nouveau


0

Ce qui suit a fonctionné pour moi, je ne sais pas quelle partie a fait l'affaire:

julian:project$ sudo service docker status
julian:varys$ 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 Wed 2020-07-15 01:21:16 UTC; 24min ago
     Docs: https://docs.docker.com
 Main PID: 6762 (dockerd)
    Tasks: 25
   CGroup: /system.slice/docker.service
           └─6762 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

julian:project$ export DOCKER_HOST=unix:///run/containerd/containerd.sock

julian:project$ sudo groupadd docker
groupadd: group 'docker' already exists
julian:project$ sudo gpasswd -a $USER docker
Adding user ubuntu to group docker
julian:project$ newgrp docker

julian:project$ ls -ln /var/run/ | grep docker
drwx------  5   0   0  120 Jul 15 01:10 docker
-rw-r--r--  1   0   0    4 Jul 15 01:10 docker.pid
srw-rw----  1   0 999    0 Jul 15 01:10 docker.sock

julian:project$ sudo rm /var/run/docker.sock                                                                                                                                                                                            
julian:project$ sudo rm /var/run/docker.pid

julian:project$ sudo service docker restart  
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.