ChatGPT解决这个技术问题 Extra ChatGPT

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

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

码头工人版本

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?

A
Alexandre Huat

调试 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,然后它就会起作用。
m
madjaoue

我遇到了这个问题,不想使用 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 解决此问题
j
jwhitlock

看来您的问题是由旧的 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
P
Petter Friberg

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

service docker start

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


遇到此错误时,我正在以 root 身份运行。似乎 sudo 为其他人修复了它 -_- 很高兴发现确实是这个,我忘了做。很简单!
D
Demobilizer

只需尝试使用 sudo。好像是权限问题!

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

它对我有用。


a
arunavkonwar

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

sudo usermod -aG docker $USER

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


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

您应该使用以下内容将您的用户添加到“docker”组:

sudo usermod -aG docker ${USER}


j
joe-khoa

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

项目清单

检查权限

docker info 

https://i.stack.imgur.com/rgsru.png

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

“chmod 777”永远不是正确的解决方案。如果是,那么您有千分之一的例外来确认此规则。
c
cweiske

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


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

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

检查泊坞窗日志

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

尝试在调试模式下启动 docker

$ sudo 码头工人 -d -D


l
leberknecht

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

J
John Jang

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

启动docker服务的命令:

$ sudo systemctl start docker

验证它是否启动的命令:

$ sudo docker run hello-world


K
Khachornchit Songsaen

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

$ sudo systemctl start docker
$ sudo docker-compose build

r
rapttor

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

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


A
Andrey Topoleov

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

sudo docker-compose build

A
Artyom Ilyin

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

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


M
Moustapha Berrou

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

sudo docker-compose-deps.yml up

V
Volodya Lombrozo

在我的情况下,问题在于不适当的图像标签名称 -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: .
    

E
Eugene Gr. Philippov

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


A
Ashraf Gardizy

最终解决方案:首先运行这个命令:sudo chown $USER /var/run/docker.sock 然后运行这个命令:docker-compose up -d --build


v
victorkolis

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


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

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

然后尝试再次连接


d
daveskylark

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

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
作为答案还不够。如果您想接受自己的答案,则必须提出问题的根本原因。否则,这将是对其他人的真正误导。顺便说一句,这里还有其他答案,他们有帮助吗?因为我没有看到你的任何评论。