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

时间:2015-11-06 08:06:32

标签: linux ubuntu docker daemon

我想转移到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命令,但无济于事。我在这做错了什么?

23 个答案:

答案 0 :(得分:429)

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

sudo usermod -aG docker $(whoami)

然后退出&再次登录进入系统或重新启动系统。 按docker version

进行测试

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

答案 1 :(得分:135)

将用户添加到泊坞窗组

  • 添加泊坞组(如果它尚不存在):

    sudo groupadd docker

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

    sudo gpasswd -a ${USER} docker

  • 重启Docker守护程序:

    sudo service docker restart

  • 执行newgrp docker或注销/以激活更改 基团。

答案 2 :(得分:31)

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

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

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

答案 3 :(得分:18)

自我注意:当我忘记使用@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="https://www.google.com/jsapi" type="text/javascript"></script> <script src="~/Scripts/jquery-2.1.4.js"></script> <script src="~/Scripts/jquery-2.1.4.min.js"></script> <script language="javascript" type="text/javascript" src="Scripts/jquery.blockUI.js"></script> </head> <body> <div id="sourceText">Hello world</div> <div id="translation"></div> <script> var sourceText = escape(document.getElementById("sourceText").innerHTML); var source = "https://www.googleapis.com/language/translate/v2?key=AIzaSyBBsdXcsCLjSex4-9EReA_MqsBFrLrkwm4&source=en&target=ar&callback=translateText&q="; $.ajax({ url: source + encodeURIComponent(sourceText), dataType: 'jsonp', async: false, success: function (data) { alert(data.data.translations[0].translatedText); $('#translation').html(data.data.translations[0].translatedText); }, error: function(x, e) { alert('Error occured while translating the text'); } }); </script> </body> </html> 运行docker命令时,我从问题标题中收到错误:

sudo

[Ubuntu 15.10]

答案 4 :(得分:12)

有同样的问题,对我有用的是:
&#xA;检查/var/run/docker.sock的所有权

&#xA;&#xA;
  ls -l /var/run/docker.sock

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

&#xA;&#xA;
  sudo chown * your-username * /var/run/docker.sock
  
&#xA;&#xA; < p>然后你可以继续尝试无障碍地执行docker命令:D

&#xA;

答案 5 :(得分:9)

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

修改

我还有这个问题,如果上面的解决方案没有奏效,请尝试this solution这是下面的命令

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

考虑

如果上面的命令有效,你可能会遇到网络泊坞问题,无论如何这解决了它,确认一下,用命令下面的日志看

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个月没有问题)你的操作系统会得到这个问题再次出现,如果是错误或安装问题

我的码头版

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

答案 6 :(得分:8)

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

sudo service docker start

你试过吗?

答案 7 :(得分:6)

我遇到了同样的问题。一直在努力解决它。

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

  1. 根据Docker's Tutorial,您需要添加Docker密钥(如果尚未添加):

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

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

    $ sudo usermod -aG docker $USER

  3. 希望这对你也有帮助。

答案 8 :(得分:5)

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

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

我在这里遇到同样的问题,而且docker命令只能以root用户身份运行,而且DOCKER_HOST为空

PS:还要注意Ubuntu上的this page是使用他们的apt存储库(即使是15.10),不是那个“ wget “事情。

答案 9 :(得分:4)

对于已经尝试重新启动计算机的用户,请按docker env documentation中的说明取消设置环境变量DOCKER_HOST,其他所有人都尝试使用

sudo service docker restart

即使重新启动机器,只有这样才能解决问题。

答案 10 :(得分:4)

docker

提供非root访问权限

添加泊坞组,如果它尚未存在。

$ sudo groupadd docker

添加已关联的用户&#34; $ {USER}&#34;到码头工人组。

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

您可能需要退出并重新登录 这将生效。

$ sudo gpasswd -a ${USER} docker

重新启动Docker守护程序。

$ sudo service docker restart

答案 11 :(得分:3)

此问题目前是谷歌搜索的第3位。在我的Linux系统上做一些解决这个问题的研究后,我想我会写这个答案。原帖说明问题出在Ubuntu上,但我也遇到过使用Fedora的问题。考虑到这一点,以下是我为解决问题所做的工作。

在Fedora 22上

安装Docker:

$> curl -fsSL https://get.docker.com/ | sh

安装Docker之后:

需要将用户添加到泊坞窗组。

$> sudo usermod -aG docker

需要启动docker守护程序

$> sudo service docker start

您可以将守护程序设置为在启动时启动

$> sudo chkconfig docker on

您可以验证泊坞窗服务是否正在运行

$> service docker status

最后一次最终检查

$> docker run hello-world

答案 12 :(得分:2)

尝试使用正在运行的命令使用“sudo”。

答案 13 :(得分:2)

我在运行docker时遇到同样的问题。

您可以将命令作为 sudo 用户:

运行
sudo docker ***your command here***

答案 14 :(得分:2)

对于Ubuntu:
当我更新码头时我发生了什么 您需要取消屏蔽服务和套接字,然后重新启动服务。

以下为我工作:

@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public static class MyClass {

    @JsonInclude(JsonInclude.Include.ALWAYS)
    public String name = "John";

    public MyEnum myEnum = MyEnum.A;
}

幕后发生的事情
systemd还可以通过将单元链接到/ dev / null来将单元标记为完全不可启动,自动或手动。这称为屏蔽单元,可以使用mask命令。

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

您可以使用以下方法检查屏蔽服务列表:

sudo systemctl mask docker.service

Output of sudo systemctl list-unit-files

要启用自动/手动启动服务,您需要使用以下命令取消屏蔽:

sudo systemctl list-unit-files

现在将启用该服务,如下所示 enter image description here

答案 15 :(得分:1)

由于docker绑定到启动时由root拥有的unix套接字,因此使用'sudo'和docker命令将起作用。

答案 16 :(得分:1)

  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的配置文件中设置)。 / LI>
  4. 只需评论bash-line就可以了。
  5. 但是如果你想让它在TCP端口而不是unix socket上运行,可以更改dockerd的配置文件,并将其设置为0.0.0.0.2375,并将该行保留为bash,如果存在,则将其设置为0.0 .0.0:2375

答案 17 :(得分:1)

在Ubuntu 16.04中测试

permission

答案 18 :(得分:0)

将当前用户添加到泊坞窗组:

sudo usermod -aG docker $(whoami)

答案 19 :(得分:0)

Ubuntu 16.04

内部文件/lib/systemd/system/docker.service更改:

ExecStart=/usr/bin/dockerd fd://

使用:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

内部文件/etc/init.d/docker更改:

DOCKER_OPTS=

使用:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

然后重新启动计算机。

答案 20 :(得分:0)

我在Amazon EC2实例上遇到了同样的错误。重启实例后问题得到解决。

答案 21 :(得分:0)

这可能会对某人有所帮助,因为错误消息极其无助,而且我已经多次执行所有标准许可步骤,但无济于事。

尽管您的系统已正确设置,但Docker有时会将鬼环境变量留在原处以阻止访问。如果您曾经一次运行它,并且重启后它刚刚停止了协作,则以下shell命令可能使其再次可访问:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

我以前安装了docker,在重新启动笔记本电脑后,它只是拒绝了工作。已正确添加到docker用户组,对套接字具有正确的权限等,但仍无法运行docker logindocker run ...等。这已为我修复。不幸的是,我必须在每次重启时都运行它。 This is mentioned on a couple of github issues also作为一种解决方法,尽管这似乎是一个错误,它是纠正Docker操作的持久障碍(注意:我在Arch Linux上,而不是OSX上,但这对我来说是同样的问题)。

答案 22 :(得分:0)

我可以通过运行以下命令来解决这个问题:

sudo mv /var/lib/dpkg/info/docker-ce* /tmp