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?
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.
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é!
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.
Si vous avez démarré docker en utilisant Sudo
, vous devez alors exécuter docker-composer avec Sudo
comme: Sudo docker-compose up
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.
Créez le groupe de docker.
$ Sudo groupadd docker
Ajoutez votre utilisateur au groupe de docker.
$ Sudo usermod -aG docker $USER
Déconnectez-vous et reconnectez-vous pour que votre appartenance à un groupe soit réévaluée.
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 .
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
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.
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
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.
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.
J'ai eu les mêmes symptômes.
Seul diff que cela s'est passé que pendant docker-compose build
docker 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é.
Essayez de lancer dockerd
ou Sudo dockerd
si 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
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"
Ma configuration a deux cas pour cette erreur:
__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.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
essaye ça:
Sudo ln -s/usr/local/bin/docker-compose/usr/bin/docker-compose
$ 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.
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.
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é!