【问题标题】:Docker can't connect to docker daemonDocker 无法连接到 docker 守护进程
【发布时间】:2014-03-19 06:02:31
【问题描述】:

将 Docker 版本更新为 0.8.0 后,输入 sudo docker version 时收到错误消息:

Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
2014/02/19 12:54:16 Can't connect to docker daemon. Is 'docker -d' running on this host?

我已经按照说明输入了命令sudo docker -d,我得到了这个:

[/var/lib/docker|2462000b] +job initserver()
[/var/lib/docker|2462000b.initserver()] Creating server
open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory[/var/lib/docker|2462000b] -job initserver() = ERR (1)
2014/02/19 12:55:57 initserver: open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory

我该如何解决这个问题?

【问题讨论】:

  • 你在运行docker -d的时候用sudo了吗?
  • 我注意到错误中写着no such file or directory[/var/lib/docker|2462000b]/var/lib/docker 是否存在于您的系统中?如果没有,那么我认为您需要重新安装 Docker。
  • 我有同样的问题(无法连接到 'ps' 显示仍在运行的守护程序),但启动守护程序时我没有收到任何“找不到文件”消息。 /var/lib/docker 确实存在。
  • 你在 VPS 上使用 docker 吗?
  • 从这里安装docker桌面,它会解决的。 docs.docker.com/docker-for-mac/install

标签: linux docker


【解决方案1】:

Linux

Post-installation steps for Linux 文档揭示了以下步骤:

  1. 创建 docker 组。
    sudo groupadd docker
  2. 将用户添加到 docker 组。
    sudo usermod -aG docker $(whoami)
  3. 注销并重新登录以确保 docker 以正确的权限运行。
  4. 启动泊坞窗。
    sudo service docker start

Mac OS X

正如Dayel Ostraco 所说,需要添加环境变量:

docker-machine start # Start virtual machine for docker
docker-machine env  # It's helps to get environment variables
eval "$(docker-machine env default)" # Set environment variables

docker-machine start 命令输出 cmets 以指导该过程。

【讨论】:

  • 是的。这对我来说是个问题。我将我的用户添加到 docker 组,现在我可以连接到守护进程。谢谢
  • FWIW,具体部分的链接是this
  • 如果由于某种原因不想注销,可以使用newgrp 命令在这个新组中启动一个新的shell。像这样:newgrp docker.
  • 我没有时间重新启动 bash。所以alias docker='sudo docker' 成功了。 :p
  • 对于 Linux,如果您希望 Docker 在启动时启动,您可以使用 configure systemd/upstart/chkconfig to start docker on boot。 systemd:sudo systemctl enable docker,chkconfig:sudo chkconfig docker on,upstart 默认开启。
【解决方案2】:

Linux

要在 Linux 上运行 docker daemon(来自 CLI),运行:

$ sudo service docker start # Ubuntu/Debian

注意:复制粘贴时跳过$字符。

在 RedHat/CentOS 上,运行:sudo systemctl start docker

要初始化“基本”文件系统,运行:

$ sudo service docker stop
$ sudo rm -rf /var/lib/docker
$ sudo service docker start

或手动点赞:

$ sudo docker -d --storage-opt dm.basesize=20G

在 Linux 上安装 docker-machine

在 Linux 上安装机器二进制文件:

  • 本地:

    install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) $HOME/bin/docker-machine
    
  • 全局:

    sudo bash -c 'install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine'
    

macOS

在 macOS 上,docker 二进制文件只是一个客户端,你不能用它来运行 docker 守护进程,因为 Docker 守护进程使用 Linux 特定的内核特性,因此你不能在 OS X 中本地运行 Docker。所以你有安装 docker-machine 以创建 VM 并附加到它。

在 macOS 上安装docker-machine

如果您还没有docker-machine 命令,请使用以下方法之一进行安装:

  • 使用Brew 命令:brew install docker-machine docker
  • 手动来自GitHub:

    install -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine
    

请参阅:Get started with Docker for Mac

在 macOS 上配置 docker-machine

要通过 Homebrew 启动 Docker Machine,请运行:

brew services start docker-machine

要创建一台default 机器(如果您没有,请参阅:docker-machine ls):

docker-machine create --driver virtualbox default

然后为 Docker 客户端搭建环境:

eval "$(docker-machine env default)"

然后通过列出容器进行仔细检查:

docker ps

请参阅:Get started with Docker Machine and a local VM


在 macOS 上安装 Docker.app

除了上述解决方案,您还可以通过以下方式安装 Docker 应用程序:

brew cask install docker

检查此post for more details。另见:Cannot connect to the Docker daemon on macOS

【讨论】:

  • sudo service docker start 在 Ubuntu 14.04 上与 Docker 1.9.1 配合使用
  • 谢谢。这就是在 Ubuntu 14.04 上对我有用的方法。其他一切都失败了。
  • 这是唯一对我有用的 Mac OSX 硬件早于 2010 年的东西。我必须从 docs.docker.com/toolbox/toolbox_install_mac 安装 docker-toolbox
  • 我需要通过 Homebrew 安装 docker-compose、docker-machine 和 docker 然后它工作正常!
  • 我在 CentOS 7.6 上使用 docker 18 和 sudo rm -rf /var/lib/docker 遇到了这个问题,然后重新启动就可以了。我真的被卡住了,没有其他解决方案适合我。
【解决方案3】:

如果您在 OS X 上运行 Docker,则运行以下 eval 对我有用。

eval "$(docker-machine env default)"

如果您不想在每个终端会话上运行此 eval 语句,您可以将其添加到您的 bash_profile

#Docker
eval "$(docker-machine env default)"

请务必重新启动终端会话或在bash_profile 上运行源代码以使更改生效。

【讨论】:

  • 这里也一样,如果我单独尝试,我经常会得到Error checking TLS connection: Host is not running...在命令docker-machine start default 成功后运行此评估。
【解决方案4】:

经过详细调查,Mac OS X 每次重新启动后(或 Docker 虚拟机重新启动)似乎都会发生此问题,这会阻止 Docker 客户端连接到 Docker 守护程序。

要解决此问题,您可以:

A) 使用官方安装程序 (https://www.docker.com/products/docker-toolbox) 重新安装 Docker Toolbox,或者干脆

B) 按顺序运行以下命令:

# First make sure that the virtual machine is running
docker-machine start default

# Regenerate TLS connection certs, requires confirmation
docker-machine regenerate-certs default

# Finally, set env
eval "$(docker-machine env default)"

C) 与 (B) 相同,您也可以复制并粘贴以下行来运行所有三个命令:

docker-machine start default; docker-machine regenerate-certs default; eval "$(docker-machine env default)"

如果您收到以下错误:

Error getting SSH command: Something went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 255
output  :

再次运行这三个命令,第二次应该可以工作了。

【讨论】:

  • 我得到的主机不存在:“默认”
  • @RomanGaufman:这对你有用吗:docker-machine start default?
  • @RomanGaufman 我必须在命令成功执行之前重新启动终端。
  • 这是因为每次你重启你的mac时虚拟机vm的ip都会改变吗?
  • @RomanGaufman 的错误由下面的答案(当前)解决:stackoverflow.com/a/34887761/634576
【解决方案5】:

这通常发生在您不在docker 组中时。您可以通过以下方式将自己添加到docker 组:

sudo usermod -aG docker yourusername

sudo usermod -aG docker $(whoami)

在此之后,您需要注销并重新登录到服务器。

或者,您可以sudo 每个 Docker 命令。

【讨论】:

  • 如果组不存在:sudo groupadd docker
【解决方案6】:

如果上述所有其他解决方案都不起作用,您可以尝试检查 /var/run/docker.sock 的所有权:

ls -l /var/run/docker.sock

如果您不是所有者,则使用以下命令更改所有权:

sudo chown *your-username* /var/run/docker.sock

然后您可以继续尝试轻松执行 Docker 命令 :D

【讨论】:

  • 我从这个答案开始,这对我有帮助!
  • 这种方法的问题是,每次重新启动守护程序时都必须重复此步骤
  • 嗨@MFIhsan,一位聪明的系统管理员会告诉您只需创建这些命令的 bash 脚本并将其添加到 crontab 以使其在重启/启动时运行,如此处所述>stackoverflow.com/a/29247942/3469960
  • 普通用户永远不应该拥有袜子!如果您不拥有袜子,请确保您在轮组和袜子所属的组中......而不是袜子所有者组!
  • 这个sudo chown $(whoami) /var/run/docker.sock 也有效吗?
【解决方案7】:

你可以使用命令

sudo service docker stop && sudo service docker start

sudo service docker restart

只需重新启动它。

【讨论】:

  • 或者sudo service docker restart,更简单?
  • with systemd: sudo systemctl restart docker
【解决方案8】:

找出 Docker 无法正常工作的最佳方法是手动运行守护程序。

$ sudo service docker stop
$ ps aux | grep docker  # do this until you don't see /usr/bin/docker -d
$ /usr/bin/docker -d

Docker 守护进程记录到 STDOUT,所以它会开始吐出它正在做的任何事情。

这是我的问题:

[8bf47e42.initserver()] Creating pidfile
2015/01/11 15:20:33 pid file found, ensure docker is not running or delete /var/run/docker.pid

这是因为该实例是从另一个虚拟机克隆的。我只需要删除 pidfile,之后一切正常。

当然,我建议不要盲目地假设这会起作用,我建议再手动运行一次守护程序,并在启动服务备份之前查看日志输出是否有任何其他错误。

【讨论】:

  • 这也是帮助我找到问题的原因(不幸的是,我后来看到了你的答案)。我的是缺少的apparmor 包。
  • 这个解决方案对我有用。删除/var/run/docker.pid后,终于可以启动docker了。
  • 警告:'-d' 已被弃用,它将很快被删除。见用法。 WARN[0000] 请改用“docker daemon”。
  • 标志已提供但未定义:-d
  • 在启用调试的最新版本中手动运行 docker 守护进程:dockerd -D
【解决方案9】:

执行ps aux | grep docker 以查看守护程序是否正在运行。如果不运行/etc/init.d/docker start

【讨论】:

  • 我也有同样的问题。 'ps' 表明我的 docker 进程仍在运行。
  • 停止和启动 docker(它已经在运行)让我理顺了。
  • sudo service docker start 告诉我“docker start/running, process 4633”然后sudo service docker status 告诉我“docker stop/waiting”
【解决方案10】:

如果收到Can't connect to docker daemon. Is 'docker -d' running on this host?的消息,可以通过docker version查看。

如果你看到Docker Client is running. but Docker Server is not之类的信息,显然你需要启动Docker服务器。

在 CentOS 中,您可以使用service 来启动或停止 Docker 服务器。

$ sudo service docker stop
$ sudo service docker start

然后,输入docker version后,会得到Docker Client and Docker Server的信息,Docker daemon已经启动了。

【讨论】:

  • sudo service docker start 在 Ubuntu 14.04 上也为我工作。
  • Cent os 7,每次启动docker时都必须这样做。
  • @Paddy 声明后需要开启服务,系统启动后会运行,并保持在后台运行。
  • 所有这些回答说:“你需要 sudo systemctl start docker”总是假设有一个 docker 服务要启动。如果安装 docker 出现任何问题,服务配置文件甚至可能不存在,在这种情况下,您会得到:“Unit docker.service not loaded”
【解决方案11】:

我也有类似的问题。我不得不注销并再次登录到 shell,因为我刚刚安装了 Docker,但我的环境中没有显示以下命令。

export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc

【讨论】:

  • 我只需要注销并重新登录。一切都已修复!
  • 这解决了我的问题!我将 Ubuntu 16.04 作为 WSL 运行。我唯一需要更改的是默认端口号:export DOCKER_HOST=127.0.0.1:2375 >> ~/.bashrc
【解决方案12】:

我在安装 Docker 后重新启动它:

$ sudo service docker stop
$ sudo service docker start

它有效。

【讨论】:

    【解决方案13】:

    使用Docker CE app

    macOS

    为 macOS 使用新的 Docker Community Edition app。例如:

    1. 卸载您目前安装的所有 Docker Homebrew 软件包:

       brew uninstall docker-compose
       brew uninstall docker-machine
       brew uninstall docker
      
    2. 安装应用程序manually 或通过Homebrew-Cask

       brew install --cask docker
      

    注意:此应用将创建到dockerdocker-composedocker-machine 等的必要链接。

    1. 运行应用程序后,查看状态菜单中的 Docker 鲸鱼图标。
    2. 现在您应该可以像往常一样在终端中使用dockerdocker-composedocker-machine 命令了。

    相关:

    Linux/Windows

    下载Docker CE from the download page 并按照说明进行操作。

    【讨论】:

    • 2018-5-20 注意:macOS 上的 Docker CE 应用程序非常糟糕。每次我打开它都只是冻结的方式,不能做任何事情。我尝试谷歌并解决了这个问题,到目前为止仍在努力
    • 这是所报告问题的正确答案,谢谢!
    • 谢谢。最新的 brew/Big Sur 的语法略有不同: brew install --cask docker
    • brew install --cask docker(截至 2021 年)
    【解决方案14】:

    我遇到了这个问题,我使用这些命令重新启动了 Docker:

    $ sudo service docker stop
    $ sudo service docker start
    

    但是我没有解决我的问题,因为我忘记在没有sudo 的情况下执行我的 Docker 命令。对于那些面临这个问题的人,请尝试检查一下。

    试试

    $ sudo docker info
    

    而不是这个:

    $ docker info
    

    【讨论】:

    • 正是我在 Ubuntu Xenial 上尝试运行 docker build 时遇到的问题。
    【解决方案15】:

    我有同样的错误,尝试docker-machine regenerate-certseval.. 对我不起作用。

    这在 OS X 10.11.3 (El Capitan) 和 Docker v1.10.1 上。我只能通过再次删除并重新创建 docker-machine 来修复它。 Source

    如果运行docker-machine ls,它会显示与下面类似的输出;

    码头工人

    未知

    错误

    无法查询 docker 版本:不能 连接到 docker 引擎端点

    尝试删除您的 Docker 机器;

    docker-machine rm -f default
    

    default 是您的 Docker 机器名称。然后;

    docker-machine create -d virtualbox default
    

    创建一个新的 Docker 机器。

    仔细检查现在一切是否正常(没有错误或未知的 Docker):

    docker-machine ls
    

    最后不要忘记在继续之前运行"$(docker-machine env default)" 或运行 Docker 快速入门终端,它会为您完成这些操作...

    【讨论】:

      【解决方案16】:

      我知道这篇文章中已经有很多答案。只是我想添加一个解决上述问题的简单答案。

      sudo systemctl start docker
      

      运行上述命令,它将启动所有与 docker 相关的线程/服务。

      【讨论】:

        【解决方案17】:

        尝试将当前用户添加到docker 组:

        sudo usermod -aG docker $USER
        

        然后注销并登录。

        【讨论】:

          【解决方案18】:

          我遇到了同样的问题 - “无法连接到 docker daemon。” (除了我在尝试启动服务器时没有收到任何“找不到文件”错误。)

          'ps' 显示 "/usr/bin/docker -d" 仍在运行

          我意识到我自己从来没有真正成功地运行过服务器。每一次尝试都产生了

          ...
          2014/03/24 21:57:29 pid file found, ensure docker is not running or delete /var/run/docker.pid
          

          所以我很晚才意识到安装 docker 可能已经向 upstart 注册了守护进程,它已经为我启动了它。因此,尝试杀死守护程序以手动重新启动它会失败(不允许操作)。所以我做了一个

          sudo kill -9 <PID>
          

          关于守护进程。另一个守护进程立即取而代之,而这个新守护进程现在可以让我的 CLI 客户端连接:

          $ sudo docker info
          Containers: 0
          Images: 0
          Driver: aufs
           Root Dir: /var/lib/docker/aufs
           Dirs: 0
          WARNING: No memory limit support
          WARNING: No swap limit support
          

          【讨论】:

            【解决方案19】:

            关注 Docker 的 DOC 站点:Manage Docker as a non-root user

            1) 创建 Docker 组

            sudo groupadd docker 
            

            2) 使用户属于 docker 组以获取该组的权限。

            sudo usermod -aG docker $USER
            

            检查是否为您的 shell 设置了 DOCKER_HOST 环境变量。

            env | grep DOCKER_HOST
            

            如果存在,

            unset DOCKER_HOST
            

            那么这应该工作:

            docker run hello-world
            

            【讨论】:

            • 你是我的救命稻草unset DOCKER_HOST为我工作
            • 花了两个小时寻找这个unset DOCKER_HOST 解决方案。谢谢!
            【解决方案20】:

            我刚刚遇到了同样的问题,在 Amazon AWS 上运行。

            这是我的尝试:

            • 使用现有的 AWS 实例在本地设置 docker-machine
            • 使用通用设置
            • 有点连接,但是由于远程端口被关闭,它失败了
            • 之后,Docker 守护进程拒绝启动,但运行 dockerd 确实有效...

            在远程机器上进行了以下测试:

            service docker start # Also restart, no success
            systemctl start docker # Also restart, no success
            dockerd # Success
            

            我删除了/var/lib/docker并卸载了所有东西,但重新安装后没有成功。不幸的是,我没有存储失败的日志,但 docker.service 只是拒绝启动。

            但是,最终解决我的问题的基本上是:

            sudo usermod -aG docker $(whoami)
            

            【讨论】:

              【解决方案21】:

              2020 年 4 月在 MacOS Catalina 上,您只需打开桌面应用程序:

              【讨论】:

              • 另外,打开 docker->preference -> kubernetes -> 勾选“启用 kubernetes”
              【解决方案22】:

              我遇到了同样的问题。在 CentOS 6.5 中:

              ps aux |grep `cat /var/run/docker.pid`
              

              如果它显示不存在 Docker 守护进程,那么我输入:

              docker -d
              

              然后 Ctrl + D 停止 Docker。因为我们使用-d 选项,Docker 将作为守护进程运行。现在我们可以这样做了:

              service docker start
              

              然后我可以做一个docker pull centos。就是这样。

              注意:如果这些不起作用,您可以尝试yum update,然后再重复这些,因为我在这些之前yum install

              【讨论】:

              • 这一步对我在机器上硬锁后诊断我的 docker 问题很重要。但是为了得到这个 docker 输出,我必须运行的命令是 sudo /usr/bin/dockerd,没有任何标志。 Ubuntu 18。
              【解决方案23】:

              如果您使用 Docker 工具在 OS X 上运行,请按照此操作。

              重新启动守护程序并配置您的环境:

              docker-machine restart
              

              然后

              docker-machine env
              

              最后,

              eval $(docker-machine env)
              

              测试守护进程是否正在运行:

              docker ps -adocker-machine ls。这将列出所有容器。

              【讨论】:

                【解决方案24】:

                Docker Service 可能没有运行。

                如果您使用的是 RedHat/Fedora/CentOS,请试试这个:

                sudo systemctl start docker

                如果您使用的是 Ubuntu/Debian:

                sudo service start docker

                Docker 将开始在您的主机和相应端口上运行。

                【讨论】:

                  【解决方案25】:

                  要解决这个问题,我必须启用 docker 服务:

                  sudo systemctl enable /usr/lib/systemd/system/docker.service
                  

                  【讨论】:

                    【解决方案26】:

                    检查你是否使用 Docker Machine :)

                    运行docker-machine env default 应该可以解决问题。

                    因为根据文档:

                    Docker Machine 是一个工具,可让您在其上安装 Docker Engine 虚拟主机,并使用docker-machine 命令管理主机。你 可以使用 Machine 在本地 Mac 或 Windows 上创建 Docker 主机 盒子、公司网络、数据中心或云端 AWS 或 Digital Ocean 等提供商。

                    使用docker-machine 命令,您可以启动、检查、停止和 重新启动托管主机,升级 Docker 客户端和守护程序,以及 配置 Docker 客户端以与您的主机通信。

                    将机器 CLI 指向正在运行的托管主机,然后您就可以运行 docker 直接在该主机上发出命令。例如,运行 docker-machine env default 指向名为default 的主机,按照屏幕上的操作 完成env 设置和运行docker ps 的说明, docker run hello-world,等等。

                    https://docs.docker.com/machine/overview/

                    【讨论】:

                      【解决方案27】:
                      1. 我也遇到了同样的问题。问题出在分配给 docker-daemon 和 docker-client 的套接字中。
                      2. 首先,在 docker.sock 上没有为 docker-client 设置权限您可以使用“sudo usermod -aG docker $USER”进行设置
                      3. 然后检查 docker-client 运行的 bash 文件,对我来说,它位于 0.0.0.0:2375,而 docker-daemon 在 unix socket 上运行。(它是在 dockerd 的配置文件中设置的)。
                      4. 只需注释 bash 行即可。
                      5. 但是如果你想让它在 TCP 端口而不是 unix 套接字上工作,请更改 dockerd 的配置文件并将其设置为 0.0.0.0.2375 并保持 bash 中的行(如果存在)或将其设置为 0.0 .0.0:2375。

                      【讨论】:

                        【解决方案28】:

                        要修复,您需要在终端中发出以下命令。我将解释每个步骤:

                        # Uninstall Docker from apt packages
                        $ sudo apt-get remove docker docker.io
                        
                        # Remove it from the libraries just to be
                        # sure it's gone forever
                        $ sudo rm -rf /var/lib/docker/*
                        

                        现在,如果您想简化事情并获得更多时间,可以使用参数installDocker 运行我的init script

                        # Pull the init script from GitHub
                        $ wget https://github.com/dminca/dotfiles/blob/master/init
                        
                        # Add rights to run the script
                        $ chmod 755 init
                        
                        # Just run the script with the installDocker parameter
                        $ ./init installDocker
                        

                        重启是可选的,但我建议您这样做以确保一切顺利。

                        【讨论】:

                          【解决方案29】:

                          我在 Ubuntu 14.04 上运行 Docker 1.10 时遇到了同样的问题,并且给定的答案都不起作用。对我来说,解决方法是在运行 Docker 守护进程时指定存储驱动程序。

                          sudo docker daemon --storage-driver=devicemapper
                          

                          【讨论】:

                            【解决方案30】:

                            我遇到了类似的问题。

                            就我而言,解决方案是删除已弃用的 docker 版本。我认为这导致了一些冲突。

                            在 ubuntu 上:

                            sudo apt remove docker
                            

                            帮我解决了问题

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2016-04-04
                              • 2020-06-03
                              • 2017-06-14
                              • 1970-01-01
                              • 2016-02-07
                              • 2021-10-27
                              • 1970-01-01
                              相关资源
                              最近更新 更多