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

我想转移到Docker,所以我刚刚开始乱它。 我已经在VirtualBox Ubuntu 15.10(Wily Werewolf)安装上安装了Docker,并在这里build议我尝试运行一个基本的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.XX/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? 

我尝试了命令,但无济于事。 我在这里做错了什么?

你需要添加你的当前用户(假设你是以ubuntu的身份login)到docker组中,如下所示

 sudo usermod -aG docker $(whoami) 

然后注销并重新login到系统或重新启动系统。 由docker versiontesting

进一步的信息如何安装docker引擎遵循docker文件

将用户添加到泊坞窗组

  • 添加泊坞窗组如果它不存在:

    sudo groupadd docker

  • 将连接的用户“$ {USER}”添加到docker组中:

    sudo gpasswd -a ${USER} docker

  • 重新启动Docker守护进程:

    sudo service docker restart

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

通常,下面的命令可以做到这一点:

 sudo service docker restart 

这,而不是docker start Docker似乎已经运行的情况。

如果这样做的话,正如所build议的,在另一个答案和这个GitHub的问题上 ,如果你没有join自己的docker组,通过运行:

 sudo usermod -aG docker <your-username> 

而你最有可能去的。


至于其他任何人遇到这种情况,在一些操作系统的docker工人安装它之后不能启动,因此,同样can't connect to daemon message出现。 在这种情况下,您可以首先通过执行以下命令来检查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]

安装好所有东西并启动服务之后,尝试closuresterminal并再次打开,然后尝试拉取图像

编辑

我也有这个问题 ,如果上面的解决scheme不起作用,试试这个解决scheme ,这是命令波纹pipe

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

注意事项

如果上面的命令工作,你可能会遇到networkingdocker问题,无论如何这解决了它,确认,看到日志与命令波纹pipe

 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 

你真的有networking问题,但是我不知道如果下一次你重新启动( 更新 ,2个月没有问题了)你的操作系统将再次得到这个问题,如果这是一个错误或安装问题

我的docker版本

 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 

你试过了吗?

有同样的问题,为我工作是:
检查/var/run/docker.sock的所有权

 ls -l /var/run/docker.sock 

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

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

然后你可以继续尝试执行docker命令,无忧无虑:D

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

它只有当我做到了:

  1. 根据Docker的教程 ,您需要添加Docker密钥(如果尚未添加),请执行以下操作:

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

  2. 然后确保你给你自己使用docker权限:

    $ sudo usermod -aG docker <yourUsernameHere>

希望这也能帮助你。

对于OSX

打开docker并通过快速入门terminal( https://docs.docker.com/engine/installation/mac/ )启动“默认”机器后,尝试使用docker命令并获取“无法连接到docker守护程序”消息, 事实certificate你需要一些envvariables集合

eval "$(docker-machine env default)"

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

作为根( sudo su )input并试试这个:

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

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

PS:还要注意在Ubuntu 上安装正确的官方方式是使用apt库(甚至在15.10), 而不是使用wget ”的东西。

这个问题目前在Googlesearch上排名第三。 在对我的Linux系统解决这个问题做了一些研究后,我想我会写这个答案。 原来的post说,问题是在Ubuntu上,但我也遇到了使用Fedora的问题。 考虑到这一点,这是我做了什么来解决这个问题。

在Fedora 22上

安装Docker:

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

安装Docker之后:

用户需要被添加到docker组。

 $> sudo usermod -aG docker 

docker守护程序需要启动

 $> sudo service docker start 

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

 $> sudo chkconfig docker on 

您可以validationdocker服务正在运行

 $> service docker status 

最后一个最后的检查

 $> docker run hello-world 

对于那些已经尝试重启机器的人来说,在docker env文档中所说的取消设置环境variablesDOCKER_HOST,其余的只是试着去

 sudo service docker restart 

即使在重新启动机器之后,只有这样做了。

从docker提供非root访问权限

如果docker组不存在,则添加docker组。

 $ sudo groupadd docker 

将连接的用户“$ {USER}”添加到泊坞窗组中。

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

您可能必须注销并重新login才能生效。

 $ sudo gpasswd -a ${USER} docker 

重新启动Docker守护进程。

 $ sudo service docker restart 

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

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

你可以像sudo用户一样运行命令:

 sudo docker ***your command here*** 

对于Ubuntu:
当我更新docker时发生在我身上。
您需要取消屏蔽服务和套接字,然后重新启动服务。

以下为我工作:

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

幕后发生了什么
systemd还可以通过将单元链接到/ dev / null来将单元标记为完全不可启动的,自动或手动的。 这被称为掩蔽单位,并可能与掩码命令。

 sudo systemctl mask docker.service 

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

 sudo systemctl list-unit-files 

sudo systemctl list-unit-files的输出

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

 sudo sytemctl unmask docker.service 

现在该服务将被启用,如下所示 在这里输入图像说明

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

  1. 我也有同样的问题。 问题在于分配给docker-daemon和docker-client的套接字。
  2. 首先,没有为docker.sock上的docker-client设置权限。您可以使用“sudo usermod -aG docker $ USER”
  3. 然后检查你的bash文件docker-client在哪里运行,对我来说是0.0.0.0:2375,而docker-daemon是在unix socket上运行的(在dockerd的configuration文件中设置的)。
  4. 只是评论bash线,它会正常工作。
  5. 但是如果你想让它在TCP端口而不是unix套接字上工作,可以修改dockerd的configuration文件并将其设置为0.0.0.0.2375,并保持bash的状态(如果存在),或者将其设置为0.0.0.0: 2375。

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

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

sudo usermod -aG docker $(whoami)

对于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" 

然后重新启动您的计算机。