无法从docker-compose连接到docker

我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0。
Docker-machine运行正常,并且可以通过docker-machine ssh进行连接。

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

但是不能从docker-compose连接。

 $ docker-compose up Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running? If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable. 

我的Dockerfile和docker-compose.yml在这里。

Dockerfile

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

泊坞窗,compose.yml

 web: build: . 

为什么不能连接? 有任何想法吗?

Docker机器正在运行。 但是您需要导出一些环境以连接到Docker机器。 默认情况下, docker CLI客户http+unix://var/run/docker.sock尝试使用http+unix://var/run/docker.sock (如错误消息中所示)与守护程序进行通信。

使用eval $(docker-machine env dev)导出正确的环境variables,然后重试。 您也可以运行docker-machine env dev来查看它将要导出的环境variables。 请注意,其中一个是DOCKER_HOST ,就像错误消息表明您可能需要设置一样。

简单的解决scheme: sudo docker-compose up


更新2016年3月14日:在docker安装过程(或docker组成?)中的某个点,有一个build议和示例将您的用户名添加到“docker”组。 这样可以避免在所有docker命令之前需要“sudo”,如下所示:

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

仔细看一下安装命令的输出(docker&docker-compose的第二次安装),你会发现必要的步骤。 这也logging在这里: https : //subosito.com/posts/docker-tips/

须藤? 没有!

厌倦了每次发布命令时都要inputsudo docker? 是的,有办法处理这个。 尽pipedocker自然需要一个root用户,但是我们可以为docker操作提供一个等同于root的组。

您可以创build一个名为docker的组,然后将所需的用户添加到该组。 重新启动docker服务后,用户将不需要每次执行docker操作时都键入sudo。 它在shell命令上的外观如何? 作为根,在这里你去:

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

完成!

更新2017-3-9

Docker安装说明已经在这里更新了。

Linux的安装后步骤

本节包含configurationLinux主机以更好地与Docker配合使用的可选步骤。

以非root用户身份pipe理Docker

docker守护进程绑定到Unix套接字而不是TCP端口。 默认情况下,Unix套接字由用户root拥有,其他用户只能使用sudo访问它。 docker守护程序始终以root用户身份运行。

如果您不想在使用docker命令时使用sudo,请创build一个名为docker的Unix组并添加用户。 当docker守护进程启动时,它将使docker组可读写的Unix套接字的所有权。

要创builddocker组并添加您的用户:

 # 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 

这个命令下载一个testing图像并在容器中运行。 容器运行时,会打印一条信息消息并退出。

默认情况下,docker守护进程始终以root用户身份运行,因此您需要在您的Docker命令中添加sudo

如果您不想在使用docker命令时使用sudo,请创build一个名为docker的Unix组并添加用户。 当docker守护进程启动时,它将使docker组可读写的Unix套接字的所有权。

要创builddocker组并添加您的用户:

  1. 创builddocker组。

    $ sudo groupadd docker

  2. 将您的用户添加到泊坞窗组。

    $ sudo usermod -aG docker $USER

  3. 注销并重新login,以便重新评估您的组成员资格。

  4. validation你可以没有sudo泊坞窗命令。

    $ docker run hello-world

这个命令下载一个testing图像并在容器中运行它。 容器运行时,会打印一条信息消息并退出。

上述步骤来自官方的Docker文档 。

如果你在Linux上,你可能没有安装docker-machine因为它只在Windows和Mac电脑上默认安装。

如果是这样,你将需要: https : //docs.docker.com/machine/install-machine/find如何在你的Linux版本上安装它的说明。

安装之后,在尝试上面列出的任何东西之前,重试运行docker-compose up

希望这有助于某人。 这对我在Fedora 25中的devilbox安装起作用。

任何人检查日志?

在我的情况下在/var/log/upstart/docker.log错误消息是:

 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" 

值得一提的是我曾经打开过VPN,所以: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start是解决scheme。

我有相同的症状。

只有在docker-compose build docker ps时发生的差异才起作用。 发生2.x版本以及3.x 重新启动docker服务,然后机器…甚至重新安装docker + docker-compose

尝试了一切,但没有任何帮助。

最后,我尝试使用docker build来“手动”构buildDockerfile。

显然,我有一个文件/文件夹内的Docker上下文权限问题。 正在尝试在开始构build时读取上下文,并失败并显示正确的错误消息。 然而,这个错误消息没有传播到docker-compose ,它只显示Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

发现解决scheme是简单地将文件/文件夹添加到.dockerignore文件,因为它不需要构build。 另一个解决scheme可能是chown或者chmod

无论如何,也许这可能会帮助遇到同样的问题,真的没有任何与docker和显示误导性的错误信息。

@srfrnk的回答为我工作。

在我的情况下,我有下一个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所有者和组 – 当其他文件所有者 – 我的用户时为root 。 当我试图build立ngnix

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running? 我添加./docker-runtime.dockerignore ,它解决了我的问题。

嗯,最简单的临时解决scheme是sudodocker – 组成..这是一个权限相关的问题,你应该添加您的用户到docker组.. .. https://docs.docker.com/engine/installation/linux/linux-postinstall/