Docker-Compose 无法连接到 Docker 守护进程

Posted

技术标签:

【中文标题】Docker-Compose 无法连接到 Docker 守护进程【英文标题】:Docker-Compose can't connect to Docker Daemon 【发布时间】:2016-04-04 14:45:57 【问题描述】:

我收到一条错误消息,提示我无法连接到 docker 守护程序。我查看了其他遇到类似问题但没有帮助的答案。我正在运行 Ubuntu 15.10 的版本。我会尽力提供我所拥有的所有信息。

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Docker 版本

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Docker-Compose 版本

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

如果我尝试停止或启动服务会发生这种情况...

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

如果我运行ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

任何帮助将不胜感激。如果您需要更多信息,请告诉我。

【问题讨论】:

请不要破坏您的帖子。发布问题后,您已将内容许可给整个 Stack Overflow 社区(根据 CC-by-SA 许可)。如果您想取消此帖子与您帐户的关联,请参阅What is the proper route for a disassociation request?。 【参考方案1】:

调试 15 分钟后,我遇到了同样的错误。原来它只需要一个sudo :)

查看 Manage Docker as a non-root user 以摆脱 sudo 前缀。

【讨论】:

他们需要一个更好的错误 =/ 这个问题有 13,000 次浏览 哥们,你只为那些投票的人节省了大约 30 个小时,而且可能只是你节省的时间的 1% 真正的解决方法是创建 docker 组,而在我看来,sudo 只是一种解决方法/hack。由于此处未解释组创建部分,因此仅给出了一个链接,并且该链接的内容已更改,我认为这是仅链接的答案,现在它基本上没有用(对于真正的修复部分)。您能否添加有关如何添加该组的说明? 我认为sudo 也是个坏主意。有关以非 root 用户身份管理 Docker 的信息,请参阅 Docker 文档:docs.docker.com/engine/installation/linux/linux-postinstall/… 基本上只需要sudo usermod -aG docker $USER,后面就可以了。【参考方案2】:

您需要 Docker 后安装组配置以获得许可


sudo usermod -aG docker $USER
su - $USER
id -nG
sudo usermod -aG docker username

在您的终端上逐个运行上述命令,如果您真的想知道每个步骤的含义,请查看(第 2 步)HERE

然后尝试重新连接

【讨论】:

【参考方案3】:

当您没有正确的权限时,通常会发生此问题。 sudo 应该是解决您问题的简单方法。 例如:sudo docker-compose build

【讨论】:

【参考方案4】:

它帮助我找到了sudo chown -Rv someuser.someuser ~someuser/docker_compose_dir/,其中someuser 是我在其下运行docker-compose 的用户。之后docker-compose就顺利了。

【讨论】:

【参考方案5】:

在我的情况下,问题在于不适当的图像标签名称 -backend - 以短前导破折号开头:

失败:

version: '2.4'

services:
  my-service:
    container_name: my.backend
    image: imagename:-backend
    build:
      context: .
    

错误信息:

ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.

工作:my-backend

version: '2.4'

services:
  my-service:
    container_name: my.backend
    image: imagename:my-backend
    build:
      context: .
    

【讨论】:

【参考方案6】:

试试sudo。好像是权限问题!

sudo docker-compose -f docker-compose-deps.yml up -d

它对我有用。

【讨论】:

【参考方案7】:

在我的情况下,这是因为 ubuntu 权限,

    列表项

检查权限

docker info 

如果他们打印问题许可, 然后使用

sudo chmod -R 777 /var/run/docker.sock

【讨论】:

"chmod 777" 永远不是正确的解决方案。如果是,那么您有千分之一的例外情况可以确认此规则。【参考方案8】:

解决此问题的一种方法是首先通过运行以下命令将您的用户添加到 docker

sudo usermod -aG docker $USER

重要提示:请记住退出您的系统(不仅仅是您的终端)并重新登录以使其生效!

【讨论】:

sudo usermod -aG docker $USER 我们还应该注销并登录以应用更改:su - $USER【参考方案9】:

您应该将您的用户添加到“docker”组,例如:

sudo usermod -aG docker $USER

【讨论】:

【参考方案10】:

我认为是因为访问权,你只需要写

sudo docker-compose-deps.yml up

【讨论】:

【参考方案11】:

对我来说,解决方法是使用 this article 安装 docker-compose 的较新版本 (1.24)。

之前的版本 (1.17) 是从 ubuntu 的默认存储库安装的,但是在安装了新版本之后,我设法启动了容器。希望它可以帮助某人。

【讨论】:

【参考方案12】:

你删除默认机器的可能性很小吗? 但是,首先检查所有文件是否都存在(OSX,其他系统类似)

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

另外,安装 Docker App,因为它更容易维护容器:

brew cask reinstall docker

ans 从 finder 启动 Docker 应用程序(等到服务完全启动)

然后,检查安装:

docker-machine ls

如果列表中没有机器,创建一台并启动它:

docker-machine create default
docker-machine start default

在此之后,构建、组合和所有其他命令应该可以正常工作。

【讨论】:

【参考方案13】:

在我的情况下,当我尝试docker-compose build 时出现同样的错误 我的解决方案是添加sudo

sudo docker-compose build

【讨论】:

【参考方案14】:

出现此错误的另一个原因:对我来说,这是docker-compose.yml 中的格式错误的图像路径定义:

  service:
    image: $CONTAINER_REGISTRY_BASE/my-service
   ...

首先看起来没问题,但我在环境中设置了CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/。显然图片路径中的// 导致了这个错误。

docker-compose: v.1.21.2
docker: 18.03.1-ce

【讨论】:

【参考方案15】:

我使用的是 Ubuntu 16.04,在使用 docker-compose 时也发现了这个问题。 我通过运行此命令修复了它。

$ sudo systemctl start docker
$ sudo docker-compose build

【讨论】:

【参考方案16】:

我遇到了这个问题,不想用sudo 搞砸事情。在调查时,我试图获取一些信息:

docker info

令人惊讶的是,我遇到了以下错误:

在尝试连接到 unix:///var/run/docker.sock 的 Docker 守护进程套接字时获得权限被拒绝:获取 http:///var/run/docker.sock/v1.38/info:拨打 unix /var/run/docker.sock:连接:权限被拒绝

由于某种原因我没有足够的权限,以下命令解决了我的问题:

sudo chown $USER /var/run/docker.sock

等等!

【讨论】:

再次重启docker后怎么样?我们必须再做一次? 不,当你重新启动 docker 时它应该可以工作。但我不确定如果你重新启动机器会发生什么。 对我也有用 :) 每次重启后都必须这样做:( @Adam 如Docker doc 中所述,您可以使用 (1st) sudo groupadd docker 然后 (2) sudo usermod -aG docker $USER 解决此问题【参考方案17】:

在我的情况下,您的 docker 服务可能会停止

启动docker服务的命令:

$ sudo systemctl start docker

验证是否启动的命令:

$ sudo docker run hello-world

【讨论】:

【参考方案18】:

您的问题似乎是由旧的 Docker 错误造成的,在 Docker 崩溃后未重新创建套接字文件。如果这是问题所在,那么重命名套接字文件应该允许重新创建它:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

由于此错误已修复,大多数收到错误 Couldn't connect to Docker daemon 的人可能会收到此错误,因为他们不在 docker 组中并且没有读取该文件的权限。使用sudo docker ... 运行可以解决这个问题,但不是一个很好的解决方案。

Docker 可以作为具有适当组权限的非 root 用户(没有sudo)运行。 Linux post-install docs 有详细信息。简短版:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

这允许docker 组中的用户在没有sudo 的情况下运行dockerdocker-compose 命令。 Docker 本身运行一个 root,允许一些攻击,所以你仍然需要小心你运行的容器。详情请见Docker Security Documentation。

【讨论】:

这个问题是特定于 Linux 安装的,修复涉及对 Linux 主机系统进行更改以修复它。如果您发布具有相同详细信息但适用于 Windows 的类似问题,您将获得更好的信息。为了解决自己,我建议仔细阅读Docker for Windows documentation【参考方案19】:

Dockerfile 目录中有当前用户无法访问的文件时,我收到此错误。 docker 因此无法将完整的上下文上传到守护进程并带来“无法在 http+docker://localunixsocket 连接到 Docker 守护进程”消息。

【讨论】:

谢谢!这为我解决了。易于检查,因为所有 docker 命令都有效,但 docker-compose 没有。 docker-compose 也在另一个目录中工作。非常误导性的错误信息,顺便说一句。 这真的应该更高了 谢谢!为我工作。使用docker build . 会产生任何权限问题。 唯一有效的方法 - 为什么 Docker 错误消息如此糟糕?谢谢! 这也解决了我的问题。当我检查我的文件夹时,我看到了一些由另一个用户拥有的文件/文件夹。一旦我通过 chowning 文件的用户/组解决了问题,就解决了我的问题。【参考方案20】:

我有同样的问题。在记录并分析了一些调试结果后,我终于解决了可能是相同的错误。先启动服务,

service docker start

不要忘记将您的用户加入 docker 组。

【讨论】:

当我遇到此错误时,我正在以 root 身份运行。好像sudo 为其他人修复了它-_- 很高兴发现确实是这个,我忘了做。如此简单!【参考方案21】:

我发现了这个,它似乎解决了我的问题。

GitHub Fix Docker Daemon Crash

我更改了 docker-compose-deps.yml 文件的内容,如链接所示。然后我跑了docker-compose -f docker-compose-deps.yml up -d。然后我把它改回来,它出于某种原因工作。我不必继续我提供的链接中的步骤,但前两个步骤为我解决了问题。

【讨论】:

ubuntu 16.04 : 只需添加 sudo: sudo docker-compose up -d 作为答案还不够。如果您想接受自己的答案,则必须提出问题的根本原因。否则,这将是对其他人的真正误导。顺便说一句,这里还有其他答案,他们有帮助吗?因为我没有看到你的任何cmets。【参考方案22】:

从“ps aux | grep docker”的输出看,docker daemon 似乎没有运行。尝试使用以下方法来查看问题所在以及 docker 未启动的原因

    检查 docker 日志

$ sudo tail -f /var/log/upstart/docker.log

    尝试在调试模式下启动 docker

$ sudo docker -d -D

【讨论】:

以上是关于Docker-Compose 无法连接到 Docker 守护进程的主要内容,如果未能解决你的问题,请参考以下文章

无法从 docker-compose 连接到 docker

构建 docker-compose 映像时无法连接到 MySQL

Docker-Compose 无法连接到 Docker 守护进程

无法从 docker-compose 文件中定义的另一个服务连接到 nsqd

带有 docker-compose 的解析仪表板:无法连接到服务器

docker-compose 中的“无法连接到本地 MySQL 服务器”