Docker命令无法连接到Docker守护程序

kra*_*r65 237 linux ubuntu daemon docker

我想转移到Docker,所以我刚刚开始搞乱它.我在VirtualBox Ubuntu 15.10(Wily Werewolf)安装上安装了Docker,按照这里的建议我尝试运行一个基本的nginx Docker镜像:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Run Code Online (Sandbox Code Playgroud)

所以我检查了Docker是否正在运行:

$ sudo service docker status
? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           ??7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
Run Code Online (Sandbox Code Playgroud)

这表明Docker守护程序实际上已经在运行,但是为了确保我只是手动启动了Docker守护程序:

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0
Run Code Online (Sandbox Code Playgroud)

然后我尝试再次运行图像,但结果相同:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Run Code Online (Sandbox Code Playgroud)

我试过sudo'ing命令,但无济于事.我在这做错了什么?

Zub*_*lam 434

您需要将当前用户[假设您以ubuntu身份登录]添加到docker组,如下所示

sudo usermod -aG docker $(whoami)
Run Code Online (Sandbox Code Playgroud)

然后注销并再次登录系统或重新启动系统.测试docker version

有关如何安装docker-engine的更多信息,请关注docker文档

  • 我重新启动了我的VM然后它工作. (20认同)
  • 我想强调"注销并再次登录系统或重新启动系统" (9认同)
  • 我看到了docker版本信息,但在输出结束时,我看到`无法连接到Docker守护进程.docker守护程序是否在此主机上运行?` (4认同)
  • 下面的@Junaid答案显示了如何避免退出/登录步骤,如果你像我一样懒,你不想重新启动应用程序;) (3认同)
  • 无需注销,请使用:exec su -l $ USER (3认同)

Jun*_*Jun 137

将用户添加到docker组

  • 添加docker组(如果尚不存在):

    sudo groupadd docker

  • 将已连接的用户"$ {USER}"添加到泊坞窗组:

    sudo gpasswd -a ${USER} docker

  • 重启Docker守护进程:

    sudo service docker restart

  • 执行newgrp docker或注销/以激活对组的更改.


Jim*_*ard 31

通常,以下命令可以解决这个问题:

sudo service docker restart
Run Code Online (Sandbox Code Playgroud)

这,而不是docker startDocker似乎已经运行的情况.

如果那样,那么,正如建议的那样,在另一个答案和这个GitHub问题上,如果你还没有在docker组中添加自己,那么运行:

sudo usermod -aG docker <your-username> 
Run Code Online (Sandbox Code Playgroud)

你最有可能去.


至于任何其他人碰到这个,在某些操作系统的docker没有在你安装后立即开始,结果,同样can't connect to daemon message出现.在这种情况下,您可以通过执行以下命令来检查Docker服务的状态,从而首先验证Docker确实没有运行:

sudo service docker status
Run Code Online (Sandbox Code Playgroud)

如果输出看起来像:docker stop/waiting而不是docker start/running, process 15378那么它显然意味着Docker不活跃.在这种情况下,请确保您启动它:

sudo service docker start
Run Code Online (Sandbox Code Playgroud)

而且,和以前一样,你很可能会很高兴.


Mar*_*cka 18

自我注意:当我忘记运行docker命令时,我从问题标题中得到错误sudo:

sudo docker run ...

[Ubuntu 15.10]


kev*_*rsi 11

有同样的问题和对我
有用的是:检查/var/run/docker.sock的所有权

ls -l /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

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

sudo chown *your-username* /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

然后你可以继续尝试无障碍地执行docker命令:D

  • 在用尽所有其他可能性之后,这就是让我在 Sabayon/Gentoo Linux 上工作的原因。 (2认同)

deF*_*tas 9

安装完所有内容并启动服务后,尝试关闭终端并再次打开,然后尝试拉动图像

编辑

我也有这个问题,如果上面的解决方案不起作用,试试这个解决方案是下面的命令

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak
Run Code Online (Sandbox Code Playgroud)

注意事项

如果上面的命令工作,你可能有网络docker问题,无论如何这解决了它,以确认,请使用命令下面的命令查看日志

tail -5f /var/log/upstart/docker.log
Run Code Online (Sandbox Code Playgroud)

如果输出有类似的东西

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up
Run Code Online (Sandbox Code Playgroud)

你确实遇到网络问题,但是我不知道下次你重新启动(更新,2个月没有问题)你的操作系统会再次遇到这个问题,如果它是一个bug或安装问题

我的码头版

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64
Run Code Online (Sandbox Code Playgroud)


yus*_*ulx 8

在Ubuntu上安装docker之后,我运行了以下命令:

sudo service docker start
Run Code Online (Sandbox Code Playgroud)

你试过吗?


小智 6

我有同样的问题.一直在努力解决它两天.

它只在我做的时候起作用:

  1. 根据Docker的教程,如果尚未添加Docker密钥,则需要添加:

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. 然后确保使用以下方法向自己授予docker权限:

    $ sudo usermod -aG docker $USER

希望这对你也有帮助.

  • 第2步可以简化为:`sudo usermod -aG docker $ USER` (2认同)

Dan*_*iro 5

以root(sudo su)身份输入并尝试:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx
Run Code Online (Sandbox Code Playgroud)

我在这里遇到了同样的问题,并且docker命令只能以root身份运行,并且也是DOCKER_HOST空的

PS:还要注意在Ubuntu 上安装正确和官方方法是使用他们的apt存储库(即使在15.10),而不是那个" wget "的东西.


Dan*_*nny 5

对于OSX:

打开docker并通过Quickstart Terminal(https://docs.docker.com/engine/installation/mac/)启动"默认"机器后,尝试使用docker命令并获取"无法连接到docker守护程序"消息,事实证明你需要一些env变量集:

eval "$(docker-machine env default)"

然后尝试一下,docker run hello-world看看是否一切都是桃子.


Mr.*_*Moe 5

对于那些已经尝试重新启动机器的人,请按照 docker env 文档中的说明取消设置环境变量 DOCKER_HOST,其余的只是尝试使用

sudo service docker restart
Run Code Online (Sandbox Code Playgroud)

即使在重新启动机器后,这也对我有用。

  • 如果您仅注销并登录,则这是必需的。 (2认同)

小智 5

授予非 root 访问权限 - 来自docker

如果 docker 组不存在,请添加它。

$ sudo groupadd docker
Run Code Online (Sandbox Code Playgroud)

将连接的用户 "${USER}" 添加到 docker 组。

更改用户名以匹配您的首选用户。

您可能需要注销并重新登录才能生效。

$ sudo gpasswd -a ${USER} docker
Run Code Online (Sandbox Code Playgroud)

重新启动 Docker 守护进程。

$ sudo service docker restart
Run Code Online (Sandbox Code Playgroud)