【问题标题】:Docker-Compose can't connect to Docker DaemonDocker-Compose 无法连接到 Docker 守护进程
【发布时间】: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

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

【问题讨论】:

标签: ubuntu terminal docker docker-compose


【解决方案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 权限,

            1. 列表项

            检查权限

            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 未启动的原因

                            1. 检查 docker 日志

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

                            1. 尝试在调试模式下启动 docker

                            $ sudo docker -d -D

                            【讨论】:

                              猜你喜欢
                              • 2020-06-03
                              • 1970-01-01
                              • 2014-03-19
                              • 1970-01-01
                              • 2018-12-01
                              • 1970-01-01
                              • 2017-06-14
                              • 1970-01-01
                              • 2016-02-07
                              相关资源
                              最近更新 更多