web-dev-qa-db-fra.com

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

J'ai installé docker-machine 0.1.0 et docker-compose 1.1.0 sous Mac OS 10.8.5.
Docker-machine fonctionne normalement et peut se connecter via 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 s'agit d'un emplacement non standard, spécifiez l'URL avec la variable d'environnement DOCKER_Host.

Mon Dockerfile et docker-compose.yml est 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?

119
DIGITALSQUAD

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 client CLIENT docker essaie de communiquer avec le démon à l'aide de 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 dev pour voir les variables d'environnement à exporter. Notez que l’un d’eux est DOCKER_Host, comme le message d’erreur le suggère.

79
Andy Shinn

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?), Une suggestion et un exemple vous permettent d'ajouter votre nom d'utilisateur au groupe "docker". Cela vous permet d'éviter d'avoir besoin de "Sudo" avant toutes les commandes du menu fixe, comme ceci:

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

Examinez attentivement le résultat des commandes d'installation (à la fois le menu fixe et la deuxième installation pour le menu fixe) 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 lancez une commande? Oui, il existe un moyen de régler ce problème. Bien que docker nécessite naturellement un utilisateur root, nous pouvons donner un groupe équivalent à la racine pour les opérations de docker.

Vous pouvez créer un groupe appelé menu fixe, puis ajouter l'utilisateur souhaité à ce groupe. Après le redémarrage du service Docker, l'utilisateur n'aura pas besoin de taper Sudo à chaque fois qu'il effectue des opérations dans le docker. À quoi cela ressemble-t-il sur les commandes d'un shell? en tant que racine, ici vous allez:

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

Terminé!

MISE À JOUR 2017-3-9

Installation de Docker les instructions ont été mises à jour ici.

Étapes de post-installation pour Linux

Cette section contient des procédures facultatives permettant de configurer les hôtes Linux pour 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'à l'aide de Sudo. Le démon docker est toujours exécuté 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-lui des utilisateurs. Lorsque le démon docker démarre, il rend la propriété du socket Unix accessible en lecture/écriture au groupe de docker.

Pour créer le groupe de menus 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.

155
Alan Thompson

Si vous avez démarré docker en utilisant Sudo, vous devez alors exécuter docker-composer avec Sudo comme: Sudo docker-compose up

19
Rohan Seth

Par défaut, le démon docker est toujours exécuté en tant qu'utilisateur root. Vous devez donc ajouter le préfixe Sudo à votre ou vos commandes Docker.

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

Pour créer le groupe de menus et ajouter votre utilisateur:

  1. Créez le groupe de docker.

    $ Sudo groupadd docker

  2. Ajoutez votre utilisateur au groupe de 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 installer les commandes dans le menu fixe 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 documentation officielle de Docker .

15
ndequeker

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

Sudo docker-compose up après cela.

J'ai Fedora 26, et en essayant de résoudre le même problème, j’ai finalement entré Docker Compose sur la page de Fedora Developers puis Docker sur la page de Fedora Developers , ce qui m’a aidé.

Probablement, le service Docker a été considéré par la communauté pour commencer avec le système et fonctionner 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 comprendre pourquoi il n'y a pas de réponse aussi populaire que celle-ci.

Sur le page de Fedora Developers , vous trouverez des instructions pour permettre à Docker de démarrer avec le système:

Sudo systemctl enable docker

10
lyosha

Si vous êtes sous Linux, il est possible que docker-machine ne soit pas installé car il est uniquement installé par défaut sur les ordinateurs Windows et Mac.

Si tel est le cas, vous devez vous rendre à: https://docs.docker.com/machine/install-machine/ pour trouver des instructions sur la manière de l'installer sur votre version de Linux.

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

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

6
specialk1st

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

4
Md Ch

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-runtime propriétaire et groupe - est root lorsque l'autre propriétaire des fichiers - mon utilisateur. Quand j'ai essayé de construire nginx

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

J'ai ajouté ./docker-runtime à .dockerignore et le problème est résolu.

3
Dima Storozhuk

Quelqu'un a vérifié le journal?

Dans mon cas, le message d'erreur dans /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" 

La peine de mentionner que j'avais VPN activé, alors: $ Sudo service openvpn stop $ Sudo service docker restart $ docker-compose up|start $ Sudo service openvpn start était la solution.

2
Sławomir Lenart

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

Seul diff que cela s'est passé que pendant docker-compose builddocker ps a fonctionné. Est arrivé avec la version 2.x ainsi que 3.x. Redémarrage du service docker, puis de la machine ... Même réinstallé docker + docker-compose.

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

Enfin, j'ai essayé de construire le fichier Docker "manuellement" en utilisant docker build.

Apparemment, j'ai eu un problème de permission sur un fichier/dossier dans le contexte Docker. Il essayait de lire le contexte lors du démarrage de la construction et échouait avec un message d'erreur approprié. Cependant ce message d'erreur n'a pas se propage à docker-compose qui ne montre que Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Après avoir trouvé que la solution consistait simplement à ajouter le fichier/dossier au fichier .dockerignore puisqu'il n'était pas nécessaire pour la construction. Une autre solution aurait pu être chown ou chmod it.

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

2
srfrnk

Essayez de lancer dockerd ou Sudo dockerdsi nécessaire avant de démarrer le démon. Si vous démarrez dockerd avec Sudo, vous pouvez également exécuter docker-compose up avec Sudo. sinon c'est bien.

Solution opérationnelle de https://github.com/docker/compose/issues/4181

0
Gathua Kiragu

Outre l'ajout d'utilisateurs au groupe de menus, pour éviter de taper Sudo de façon répétitive, vous pouvez également créer un alias pour les commandes docker, comme suit:

alias docker-compose="Sudo docker-compose"
alias docker="Sudo docker"
0
Shanu Gupta

Ma configuration a deux cas pour cette erreur:

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

lors de l'exécution de docker-compose pull - j'obtenais une erreur en dessous de l'erreur

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

est-ce qu'il court?

solution -

Sudo service docker start 

problème résolu

0
kumar

essaye ça:

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

0
Tarun Bhavnani

$ Sudo docker-compos up

J'ai suivi les étapes décrites dans la réponse ci-dessus pour ajouter $ USER à un menu fixe. Je ne voulais pas ajouter un nouveau menu fixe à un groupe, car dans mon installation, un groupe nommé nom fixe a été créé automatiquement.

Docker CE est installé et en cours d’exécution. Le groupe de menus est créé mais aucun utilisateur n’y est ajouté. Vous devez utiliser Sudo pour exécuter les commandes Docker. Poursuivez sur postinstall Linux pour permettre aux utilisateurs non privilégiés d’exécuter des commandes Docker. autres étapes de configuration facultatives.

mais utiliser Docker-Composer ne fonctionnait pas non plus. Cela a donné la même erreur précédente. Donc, dans mon cas (Ubuntu 18.10), Sudo docker-compos up a résolu le problème.

ps: @Tiw merci pour le conseil.

0

Pour ma part, j’ai commencé à mettre à niveau Docker et j’ai annulé en cours de route. Je n'ai pas remarqué que Docker ne fonctionnait pas (le cas échéant, une icône apparaît dans la barre de navigation supérieure de mon Macbook, à côté de la batterie restante, de la durée, etc.). Une fois que j'ai lancé et terminé la mise à niveau, docker-compose up a encore fonctionné!

0
Rock Lee