当前位置: 首页>>技术问答>>正文


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

, , ,

问题描述

我想转移到Docker,所以我刚刚开始搞乱它。我已经在VirtualBox Ubuntu 15.10(Wily Werewolf)安装上安装了Docker,而作为suggested here,我尝试运行基本的nginx Docker镜像:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

所以我检查了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.

这表明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

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

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

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

最佳解决办法

您需要将当前用户添加到docker组,如下所示:

sudo usermod -aG docker $(whoami)

注销&再次登录系统或重新启动系统。由docker version测试

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

次佳解决办法

将用户添加到docker组

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

  • 将已连接的用户”${USER}”添加到泊坞窗组:sudo gpasswd -a ${USER} docker

  • 重新启动Docker守护程序:sudo service docker restart

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

第三种解决办法

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

sudo service docker restart

对于Docker似乎已经在运行的情况,而不是docker start

如果那样,按照建议和另一个答案以及在此GitHub issue上,如果您还没有将自己添加到docker组中,请执行以下操作:

sudo usermod -aG docker <your-username> 

你最有可能去。


至于碰到这个的任何其他人,在某些操作系统的docker中,在安装它之后不会立即启动,因此会出现相同的can't connect to daemon message。在这种情况下,您可以通过执行以下命令来检查Docker服务的状态,从而首先验证Docker确实没有运行:

sudo service docker status

如果输出类似于:docker stop/waiting而不是docker start/running, process 15378那么它显然意味着Docker不活动。在这种情况下,请确保您启动它:

sudo service docker start

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

第四种办法

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

sudo docker run ...

[Ubuntu 15.10]

第五种办法

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

ls -l /var/run/docker.sock

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

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

然后你可以继续尝试执行docker命令hassle-free:D

第六种办法

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

Edit

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

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

Considerations

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

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

如果输出有类似的东西

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

你确实遇到网络问题,但是我不知道下次你重新启动(更新,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

第七种办法

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

sudo service docker start

你试过吗?

第八种办法

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

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

  1. 根据Docker’s Tutorial,您需要添加Docker密钥(如果尚未添加):$ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. 然后确保使用以下命令向自己授予docker权限:$ sudo usermod -aG docker $USER

希望这对你也有帮助。

第九种办法

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

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

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

PS:还要注意Ubuntu上的correct and official way to install是使用他们的apt存储库(即使是15.10),而不是”wget”。

第十种办法

对于OSX:

打开docker并通过Quickstart Terminal(https://docs.docker.com/engine/installation/mac/)启动’default’机器后,尝试使用docker命令并获取“无法连接到docker守护程序”消息,结果发现需要设置一些env变量:

eval "$(docker-machine env default)"

然后用docker run hello-world试试看是否一切都是桃子的。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6475.html,未经允许,请勿转载。