无法从docker-compose说明连接到docker这里已更新。

问题描述 投票:111回答:14

我在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

无法连接到http + unix://var/run/docker.sock上的Docker守护程序 - 它正在运行吗?

如果它位于非标准位置,请使用DOCKER_HOST环境变量指定URL。

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

Dockerfile

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

泊坞窗,compose.yml

web:
  build: .

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

docker docker-compose
14个回答
77
投票

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

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


2
投票

我有同样的症状。

只有在 $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start docker-compose build工作时才发生的差异。发生了版本docker ps以及2.x。重新启动3.x服务,然后机器...甚至重新安装docker + docker

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

最后,我尝试使用docker-compose“手动”构建Dockerfile。

显然我在docker build上下文中的文件/文件夹上有权限问题。它正在尝试在启动构建时读取上下文,并且失败并显示正确的错误消息。但是,此错误消息未传播到仅显示Dockerdocker-compose

发现解决方案只是将文件/文件夹添加到Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?文件中,因为构建不需要它。另一个解决方案可能是.dockerignorechown

无论如何,这可能会帮助遇到与chmod无关的同一问题的人和显示的误导性错误消息。


0
投票

对我来说,我开始升级Docker并在中途取消。我没有注意到Docker没有运行(如果是的话,我的Macbook顶部导航栏上有一个图标,电池剩余,时间等)。一旦我启动它并完成升级,docker再次工作!


0
投票

$ sudo docker-compose up

我确实按照上面的答案中的步骤将$ USER添加到组docker。我不想添加新的组码头,因为在我的docker安装中,自动创建了一个名为docker的组。

docker-compose up

但是使用docker-compose也不起作用。它给出了同样的错误。所以在我的情况下(Ubuntu 18.10)sudo docker-compose up修复了这个问题。

ps:@Tiw感谢您的建议。


0
投票

试试这个:

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


0
投票

在运行docker-compose pull时 - 我遇到错误错误ERROR:无法连接到http + docker:// localhost的Docker守护程序 - 它正在运行吗?

解决方案 - sudo服务码头启动

问题解决了


140
投票

对我来说简单的解决方案:sudo docker-compose up


更新2016-3-14:在docker安装过程(或docker-compose?)的某个时刻,有一个建议和示例将您的用户名添加到“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的第二次安装),您将找到必要的步骤。它也记录在这里:https://subosito.com/posts/docker-tips/

须藤?不!

厌倦了每次发出命令时输入sudo docker?是的,有办法解决这个问题。虽然自然docker需要root用户,但我们可以为docker操作提供root等效组。

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

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

完成!

UPDATE 2017-3-9

Docker installation instructions have been updated here.

Post-installation steps for Linux

本节包含配置Linux主机以使用Docker更好地工作的可选过程。

以非root用户身份管理Docker

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

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

要创建docker组并添加您的用户:

# 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

此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出。


17
投票

如果你使用sudo开始使用docker,那么你应该运行docker-compose up with sudo Like:sudo docker-compose up


15
投票

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

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

To create the docker group and add your user:

  1. 创建docker组。 $ sudo groupadd docker
  2. 将您的用户添加到docker组。 $ sudo usermod -aG docker $USER
  3. 注销并重新登录,以便重新评估您的组成员身份。
  4. 验证您是否可以在没有sudo的情况下停靠命令。 $ docker run hello-world

此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出。

上面列出的步骤来自official Docker documentation


10
投票

sudo systemctl start docker - 启动Docker服务。

之后的sudo docker-compose up

我有Fedora 26,并试图解决同样的问题,我最终进入Docker Compose on Fedora Developers' page然后Docker on Fedora Developers' page,这帮助了我。

也许,社区认为docker服务从系统开始并一直在后台运行,但对我来说这并不是那么明显,这就是我能想到为什么没有像这样的流行答案的原因。

Fedora Developers' page上有说明如何启用Docker以启动系统:

sudo systemctl enable docker


6
投票

如果您使用的是Linux,则可能没有安装docker-machine,因为它仅在Windows和Mac计算机上默认安装。

如果是这样,您将需要访问:qazxsw poi以查找有关如何在您的Linux版本上安装它的说明。

安装完成后,在尝试上面列出的任何内容之前重试运行https://docs.docker.com/machine/install-machine/

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


4
投票

如果您使用的是docker-machine,那么您必须使用env变量激活环境。如果你没有使用docker-machine,那么用sudo运行你的命令


3
投票

来自@srfrnk的回答对我有用。

在我的情况下,我有下一个docker-compose.yml文件:

docker-compose up

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

nginx

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


2
投票

有谁检查过日志?

在我的情况下,.dockerignore中的错误消息是:

/var/log/upstart/docker.log

值得一提的是我打开了vpn,所以: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" 就是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.