Docker-Compose无法连接到Docker Daemon


114

我收到一条错误消息,提示我无法连接到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

任何帮助将不胜感激。让我知道您是否需要更多信息。


1
请不要破坏您的帖子。发布问题后,便已将内容许可给了整个Stack Overflow社区(根据CC-by-SA许可)。如果您想将此帖子与您的帐户取消关联,请参阅取消关联请求的正确途径是什么?
错误

Answers:


267

调试15分钟后,我遇到了相同的错误。事实证明,它所需要的只是一个sudo:)在https://docs.docker.com/engine/installation/linux/ubuntulinux/处签出[创建Docker组] 以摆脱sudo前缀。


35
他们需要更好的错误= /这个问题有13,000意见
Jonathan

4
男人,您只为那些投票支持的人节省了大约30个小时,而实际上这可能只是您节省了1%的时间
vak

5
真正的解决方法是创建docker组,而sudo我认为这只是一个解决方法/黑客。因为这里没有解释组创建部分,所以只给出了一个链接,并且该链接的内容发生了变化,我认为这是仅链接的答案,现在它实际上是无用的(对于真正的修复部分)。您能否添加有关如何添加该组的说明?
hoijui

2
我认为这sudo也是一个坏主意。请参阅Docker文档以非root用户身份管理Docker:docs.docker.com/engine/installation/linux/linux-postinstall/…–
jwhitlock

6
基本上,您所需要做的就是sudo usermod -aG docker $USER,之后它将可以使用。
user2340939'1

65

我遇到了这个问题,不想使用搞砸了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后怎么样?我们必须再次做这个鲍勃吗?
Light.G

否,重新启动docker后应该可以使用。但是我不确定如果重新启动计算机会发生什么。
madjaoue

默认情况下,Docker将保留docker.sock一个非根用户组docker。但是我们可以-G在Docker守护程序启动期间通过标志来更改它。在我的情况下,我为添加一个组$USERNAME,意味着添加docker组,然后重新启动计算机(ubuntu 16.04,PC)。它运作良好。这是推荐在码头工人的文档。
Light.G

3
也对我有用:)
Kamil J.19

27

看来您的问题是由一个旧的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可以以sudo具有适当组权限的非root用户身份运行(不带)。在安装后的文档的Linux具有的细节。简短版本:

$ 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组中的用户运行dockerdocker-compose无需使用命令sudo。Docker本身运行的是ro​​ot用户,因此可能会受到一些攻击,因此您仍然需要注意运行的容器。有关更多详细信息,请参阅Docker安全文档


该问题特定于Linux安装,并且此修复程序涉及Linux主机系统上的更改以对其进行修复。如果您针对Windows发布具有相同详细信息的类似问题,则会获得更好的信息。为了解决问题,我建议您仔细阅读Docker for Windows文档
jwhitlock,

10

我遇到过同样的问题。经过记笔记并分析了一些调试结果,最后,我解决了可能是相同错误的问题。首先启动服务,

service docker start

不要忘记将您的用户包括在docker组中。


遇到此错误时,我以root用户身份运行。似乎sudo为其他人修复了它-_-很高兴发现我确实确实是这样做的,我忘记了做。很简单!
威尔

8

您应该使用类似以下的命令将用户添加到“ docker”组:

sudo usermod -aG泊坞窗$ {USER}


5

Dockerfile目录中有当前用户无法访问的文件时,出现此错误。docker因此无法将整个上下文上载到守护程序,并显示“ 无法通过http + docker:// localunixsocket连接到Docker守护程序 ”消息。


2
谢谢!这为我解决了。易于检查,因为所有docker命令均有效,但docker-compose无效。docker-compose也在另一个目录中工作。误导性错误消息,顺便说一句。
Csongor Fagyal '17

1
这应该真的更高
Arlen Anderson '18

1
谢谢!为我工作。使用docker build .将产生任何权限问题。
大家

唯一有效的方法-为什么Docker错误消息如此糟糕?谢谢!
coderMe

4

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

sudo usermod -aG docker $USER

重要信息:请记住退出系统(不仅仅是终端),然后重新登录才能生效!


sudo usermod -aG docker $ {USER}我们还应该注销并登录以应用更改:su-$ {USER}
su-

3

从“ ps aux | grep docker”的输出,看起来docker daemon没有运行。尝试使用以下方法查看问题所在以及为什么docker无法启动

  1. 查看Docker日志

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

  1. 尝试以调试模式启动Docker

$ sudo docker -d -D


2

就我而言,您的docker服务可能已停止

启动docker服务的命令:

$ sudo systemctl start docker

验证它是否开始的命令:

$ sudo docker run hello-world


2

出现此错误的另一个原因:对我来说,这是格式错误的image-path定义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

2

尝试一下sudo。好像是权限问题!

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

它为我工作。


1

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

$ sudo systemctl start docker
$ sudo docker-compose build

1

您删除默认计算机的可能性很小吗?但是,首先检查是否所有文件都存在(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

从finder中启动Docker应用(等待直到服务完全启动)

然后,使用以下命令检查安装:

docker-machine ls

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

docker-machine create default
docker-machine start default

在此之后,构建,撰写和所有其他命令应正常工作。


1

就我而言,是因为ubuntu许可,

  1. 项目清单

通过检查权限

docker info 

如果他们打印问题权限, 在此处输入图片说明 则使用

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

0

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

先前的版本(1.17)是从ubuntu的默认存储库安装的,但是在安装了较新的版本后,我设法启动了该容器。希望它能帮助到别人。



-1

在我的情况下,当我尝试docker-compose build 并且我的解决方案只是添加时,具有相同的错误sudo

sudo docker-compose build

-2

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

GitHub修复Docker守护进程崩溃

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


2
ubuntu 16.04:只需添加sudo:sudo
docker

这还不够答案。如果您想接受自己的答案,则必须提出问题的根本原因。否则,这将对其他人造成真正的误导。顺便说一句,这里还有其他答案,他们有帮助吗?由于我没有看到您的任何评论。
Light.G
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.