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


246

我想搬到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?

因此,我检查了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命令,但无济于事。我在这里做错了什么?


1
同样的问题。我也是在Ubuntu 15.10上:(
Daniel Loureiro,2015年

1
同样的问题,ubuntu 15.10
Lucas Tettamanti

1
只需重启您的Docker服务即可。感谢@jim <pre> sudo服务docker restart </ pre>
Nasruddin

1
Nasruddin,那肯定对我没有用... :-(
Rafael_Espericueta 16'7

1
我必须重新启动机器才能使其正常运行。
romaroma '16

Answers:


443

您需要按如下方式将当前用户添加到docker组:

sudo usermod -aG docker $(whoami)

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

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


愚蠢的,但它也对我有用@RobinLoxley,这应该是一个实际的答案,而不仅仅是评论,让我知道如果您发布它,我给您点

9
我会强调“注销并再次登录系统或重新启动系统”
米歇尔

3
@Junaid下面的答案显示了如何避免注销/登录步骤,以防万一您像我一样懒惰,不想重启应用程序;)
brandizzi 2016年

这正是Docker教程中提到的内容,但是注销并重新登录对我来说不起作用。我必须重新启动系统才能使其正常运行。
aalaap

4
我看到了docker版本信息,但是在输出的最后,我看到了Cannot connect to the Docker daemon. Is the docker daemon running on this host?
ghanbari

137

将用户添加到Docker组

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

    sudo groupadd docker

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

    sudo gpasswd -a ${USER} docker

  • 重新启动Docker守护程序:

    sudo service docker restart

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


1
看来这newgrp docker是本地的,而不是登录会话。从手册页上根本看不出来。
伯吉

1
为我工作。谢谢!
Apokai

唯一有效的答案!在私有云Linux机器上,它仍然有效!
Meghna Natraj

在Ubuntu 18.04上工作!谢谢
Kshitij Saraogi

33

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

sudo service docker restart

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

如果可行,那么,如建议的那样,在另一个答案中以及在此GitHub问题上,如果您尚未将自己添加到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

而且,像以前一样,您很有可能会继续前进。


18

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

sudo docker run ...

[Ubuntu 15.10]


12

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

ls -l /var/run/docker.sock

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

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

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


2
在用尽所有其他可能性之后,这就是让我在Sabayon / Gentoo Linux上运行的原因。
gerrit_hoekstra

该文件归所有者所有,root但属于同一docker组。docker根据Docker的文档,正确的方法是将您的当前用户分配给该组:sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante

9

安装所有组件并启动服务后,请尝试关闭终端并再次打开,然后尝试拉出映像

编辑

我也有过这样的问题再次,如果上面的解决方案没有奏效,尝试这种解决方案是将命令波纹管

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

您确实遇到了网络问题,但是我还不知道下一次重启(更新,两个月后再没有问题)时,您的操作系统是否会再次遇到此问题,并且是错误还是安装问题

我的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

8

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

sudo service docker start

你试过了吗?


6

我有同样的问题。努力解决了两天。

它只有在我这样做时才起作用:

  1. 根据Docker的Tutorial,如果尚未添加Docker密钥,则需要使用以下命令添加:

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

  2. 然后确保您使用以下方式向自己授予docker特权:

    $ sudo usermod -aG docker $USER

希望这对您也有帮助。


2
步骤2可以简化为:sudo usermod -aG docker $USER
johntellsall,2016年

5

以root(sudo su)输入,然后尝试以下操作:

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

我在这里遇到了同样的问题,docker命令仅以root身份运行,并且此状态为DOCKER_HOST

PS:还请注意,在Ubuntu 上安装正确且正式的方法是使用其apt仓库(即使在15.10上),而不要使用wget ”东西。


那个“ wget”东西只是将docker仓库放到了您的apt源中..即,您被要求以“正确和正式的方式”手动做同样的事情....
Alar

1
恐怕你错了,阿拉尔。“ wget”方法将在您的apt源中添加docker存储库,这很好,但是它还会做很多其他不好的事情,例如设置DOCKER_HOST env var,这将阻止docker开箱即用。不是因为这两种方法都将docker添加到仓库中,因为它们都是相同的。
Daniel Loureiro 2015年

5

对于OSX

打开docker并通过快速启动终端(https://docs.docker.com/engine/installation/mac/)启动“默认”计算机后,您尝试使用docker命令并获得此“无法连接到docker daemon”消息,结果是您需要设置一些env变量

eval "$(docker-machine env default)"

然后尝试一下,docker run hello-world看是否一切都是桃红色的。


5

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

sudo service docker restart

即使重启机器,这也对我有用。


2
如果您仅注销和登录,则这是必需的。
张隆琪

4

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

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

$ sudo groupadd docker

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

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

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

$ sudo gpasswd -a ${USER} docker

重新启动Docker守护程序。

$ sudo service docker restart

3

这个问题目前在Google搜索中排名第3。在对解决我的Linux系统上的问题进行了一些研究之后,我想我会写这个答案。原始帖子指出问题出在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

您可以验证Docker服务正在运行

$> service docker status

最后的最后一张支票

$> docker run hello-world

在Fedora 23上,该组可以称为dockerroot。另外,您可能希望从存储库(而不是curl ... | sh)安装它,以便以后可以更新:dnf install docker
basic6 '16

许多人没有一组“泊坞窗”,所以我们必须先添加它groupadd docker,然后把它添加到您的用户名sudo usermod -aG docker your_username
TonyTony

2

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


“我曾尝试sudo'ing命令,但无济于事。有人知道我在这里做错了吗?欢迎所有提示!”
RhinoDevel '16

2

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

您可以以sudo用户身份运行命令:

sudo docker ***your command here***

2

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

以下为我工作:

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

通过将
systemd链接到/ dev / null,可以自动或手动将一个单元标记为完全无法启动。这称为遮罩单元,可通过mask命令来实现。

sudo systemctl mask docker.service

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

sudo systemctl list-unit-files

sudo systemctl list-unit-files的输出

要启用自动/手动启动服务,您需要使用以下方法解除屏蔽:

sudo sytemctl unmask docker.service

现在将启用服务,如下所示 在此处输入图片说明


1

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


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套接字上运行(在dockerd的配置文件中设置)。
  4. 只需评论bash行,它将正常工作。
  5. 但是,如果要使其在TCP端口而不是unix套接字上运行,请更改dockerd的配置文件,并将其设置为0.0.0.0.2375,并将该行保留在bash中(如果存在)或将其设置为0.0.0.0: 2375。

1

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

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

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

我以前使用过docker安装,重新启动我的笔记本电脑后,它只是拒绝工作。正确添加到泊坞窗的用户群,有插座等上正确的权限,但仍然无法运行docker logindocker run ...等这个固定为我。不幸的是,我必须在每次重启时都运行它。在github上的几个问题中也提到了这作为一种解决方法,尽管这似乎是一个错误,它是纠正Docker操作的持久障碍(注意:我在Arch Linux上,而不是OSX上,但这对于同一问题我)。


1

在Ubuntu 16.04中测试

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart

0

我在Amazon EC2实例上遇到了相同的错误。重新启动实例后,该问题已解决。


0

将当前用户添加到Docker组:

sudo usermod -aG docker $(whoami)


请格式化为代码!并解释此命令。并使用长(以开头--)选项。
buhtz

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"

然后重新启动计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.