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
的情况下运行docker
和docker-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 映像时无法连接到 MySQL
Docker-Compose 无法连接到 Docker 守护进程
无法从 docker-compose 文件中定义的另一个服务连接到 nsqd