Docker无法连接到Docker守护程序


473

将Docker版本更新为后0.8.0,输入时出现错误消息sudo docker version

Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
2014/02/19 12:54:16 Can't connect to docker daemon. Is 'docker -d' running on this host?

我已经按照说明进行了操作,并输入了command sudo docker -d,我得到了:

[/var/lib/docker|2462000b] +job initserver()
[/var/lib/docker|2462000b.initserver()] Creating server
open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory[/var/lib/docker|2462000b] -job initserver() = ERR (1)
2014/02/19 12:55:57 initserver: open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory

我该如何解决这个问题?


7
运行docker -d时是否使用sudo?
Ben Whaley 2014年

我注意到错误提示no such file or directory[/var/lib/docker|2462000b]/var/lib/docker您的系统上是否存在?如果没有,那么我认为您需要重新安装Docker。
Ben Whaley 2014年

3
我有同样的问题(无法连接到仍在运行“ ps”显示的守护程序),除了启动守护程序时未收到任何“找不到文件”消息。/ var / lib / docker确实存在。
乔纳森·哈特利2014年

您是否在VPS上使用docker?
pigletfly 2014年

从此处安装docker桌面,它将解决该问题。docs.docker.com/docker-for-mac/install
Guy Assaf

Answers:


642

的Linux

为Linux安装后步骤文档揭示了以下步骤:

  1. 创建泊坞窗组。
    sudo groupadd泊坞窗
  2. 将用户添加到docker组。
    sudo usermod -aG泊坞窗$(whoami)
  3. 注销并重新登录以确保docker以正确的权限运行。
  4. 启动docker。
    sudo服务docker start

Mac OS X

正如Dayel Ostraco所说的,添加环境变量是必要的:

docker-machine start # Start virtual machine for docker
docker-machine env  # It's helps to get environment variables
eval "$(docker-machine env default)" # Set environment variables

docker-machine start命令输出注释以指导该过程。


是。这是我的问题。我将用户添加到docker组,现在可以连接到守护程序了。谢谢
Bogdan 2015年

FWIW,链接到特定的部分是这个
不对称

20
如果由于某种原因您不想注销,则可以使用newgrpcommand在该新组中启动新的shell。像这样:newgrp docker
DenilsonSáMaia

sudo chown $ USER:$ USER / path / to / docker / binary
Ivor Scott

我没有时间重新启动bash。所以alias docker='sudo docker'做的伎俩。:p
LovaBill '16

149

的Linux

要在Linux上(从CLI)运行docker daemon ,请运行:

$ sudo service docker start # Ubuntu/Debian

注意:$复制和粘贴时跳过字符。

在RedHat / CentOS上,运行:sudo systemctl start docker

要初始化“基本”文件系统,请运行:

$ sudo service docker stop
$ sudo rm -rf /var/lib/docker
$ sudo service docker start

或手动像:

$ sudo docker -d --storage-opt dm.basesize=20G

docker-machine在Linux上安装

要在Linux上安装计算机二进制文件:

  • 本地:

    install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) $HOME/bin/docker-machine
    
  • 全球:

    sudo bash -c 'install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine'
    

苹果系统

在macOS上,docker二进制文件只是一个客户端,您不能使用它来运行docker守护程序,因为Docker守护程序使用特定于Linux的内核功能,因此您不能在OS X上本地运行Docker。因此必须进行安装docker-machine才能创建VM并附加到它。

docker-machine在macOS上安装

如果您还没有docker-machine命令,请使用以下方法之一安装它:

  • 使用Brew命令:brew install docker-machine docker
  • GitHub手动进行:

    install -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine
    

请参阅:Docker for Mac入门

docker-machine在macOS上配置

要通过Homebrew 启动Docker Machine,请运行:

brew services start docker-machine

要创建一default台机器(如果没有,请参阅:)docker-machine ls

docker-machine create --driver virtualbox default

然后为Docker客户端设置环境:

eval "$(docker-machine env default)"

然后通过列出容器再次检查:

docker ps

请参阅:Docker Machine和本地VM入门


在macOS上安装Docker.app

除了上述解决方案,您还可以通过以下方式安装Docker应用:

brew cask install docker

检查此帖子以获取更多详细信息。另请参阅:无法连接到macOS上的Docker守护程序


1
sudo服务docker start在Ubuntu 14.04上可与Docker 1.9.1一起使用

谢谢。这就是在Ubuntu 14.04上为我工作的原因。其他一切都失败了。
nyxee

这是在Mac OSX上使用的硬件早于2010年的唯一适用于我的东西。我必须docker-toolboxdocs.docker.com/toolbox/toolbox_install_mac
Vikram

2
我需要通过Homebrew安装docker-compose,docker-machine和docker,然后工作正常!
Entalpi '18年

我在带有docker 18的CentOS 7.6上遇到了这个问题sudo rm -rf /var/lib/docker,然后重启就可以了。我真的很困,没有其他解决方案对我有用。
阿什坎

142

如果您在OS X上运行Docker,则运行以下eval对我有用。

eval "$(docker-machine env default)"

如果您不想在每个终端会话上都运行此eval语句,可以将其添加到您的bash_profile

#Docker
eval "$(docker-machine env default)"

确保重新启动终端会话或运行源代码,bash_profile以使更改生效。


3
同样在这里,如果我一个人尝试,我经常会Error checking TLS connection: Host is not running在命令执行docker-machine start default完该命令后得到...运行此eval 。
Emilio Ferrucci

100

详细调查之后,这个问题似乎发生的Mac OS X重新启动后,每一次(或泊坞窗重新启动虚拟机),它可以防止泊坞客户端连接到码头工人守护进程。

要解决此问题,您可以:

A)使用官方安装程序(https://www.docker.com/products/docker-toolbox)或简单地重新安装Docker Toolbox

B)按顺序运行以下命令:

# First make sure that the virtual machine is running
docker-machine start default

# Regenerate TLS connection certs, requires confirmation
docker-machine regenerate-certs default

# Finally, set env
eval "$(docker-machine env default)"

C)与(B)相同,您也可以复制并粘贴以下行来运行所有三个命令:

docker-machine start default; docker-machine regenerate-certs default; eval "$(docker-machine env default)"

如果出现以下错误:

Error getting SSH command: Something went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 255
output  :

只需再次运行这三个命令,它应该第二次运行。


6
我收到的主机不存在:“默认”
Roman Gaufman

@RomanGaufman:这对您有用吗:docker-machine start default?
KAD

1
@RomanGaufman在命令成功执行之前,我必须重新启动终端。
anon58192932 '16

这是因为每次重新启动Mac时,虚拟盒虚拟机的IP都会更改吗?
崔鹏飞崔鹏飞2016年

@RomanGaufman的错误已由以下答案(当前)解决了:stackoverflow.com/a/34887761/634576
Dave Schweisguth,2016年

47

当您不在docker小组中时,通常会发生这种情况。您可以使用以下方法将自己添加到该docker组:

sudo usermod -aG docker yourusername

要么

sudo usermod -aG docker $(whoami)

此后,您需要注销并重新登录到服务器。

或者,您可以使用sudo每个Docker命令。


5
并且如果组不存在:sudo groupadd
docker

30

如果上述所有其他解决方案均无效,则可以尝试检查以下项的所有权/var/run/docker.sock

ls -l /var/run/docker.sock

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

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

然后,您可以继续尝试执行无忧的Docker命令:D


1
我从这个答案开始,这对我有帮助!
Andrzej Martyna

2
这种方法的问题在于,每次重新启动守护程序时,都必须重复此步骤
MFIhsan

嗨@MFIhsan智能的SYS管理员会告诉你简单地创建这些命令的bash脚本,并与它添加到crontab来有它在重新启动时运行/启动按此处的说明> stackoverflow.com/a/29247942/3469960
kevthanewversi

普通用户永远不要拥有袜子!如果您不拥有袜子,那么请确保您属于轮组和袜子所属的组...而不是袜子所有者组!
CrazyMerlin

16

找出Docker不起作用的最佳方法是手动运行守护程序。

$ sudo service docker stop
$ ps aux | grep docker  # do this until you don't see /usr/bin/docker -d
$ /usr/bin/docker -d

Docker守护程序将日志记录到STDOUT,因此它将开始吐出正在执行的操作。

这是我的问题是:

[8bf47e42.initserver()] Creating pidfile
2015/01/11 15:20:33 pid file found, ensure docker is not running or delete /var/run/docker.pid

这是因为实例是从另一个虚拟机克隆的。我只需要删除pidfile,然后一切正常。

当然,我建议不要再盲目地假设这会起作用,而是建议您再次手动运行守护程序一次,并在启动服务备份之前检查日志输出是否存在其他错误。


1
这也是帮助我找到问题的原因(但是很遗憾,我后来看到了您的答案)。我的是失踪的apparmor包裹。
Pierre de LESPINAY,2015年

这个解决方案对我有用。删除/var/run/docker.pid之后,我终于能够启动docker。
jirikadlec2 2015年

3
警告:不推荐使用-d,它将很快被删除。查看用法。WARN [0000]请改用'docker daemon'。
juanmf

3
标志提供但没有得到确定:-d
路易斯·德索萨

要在启用调试的最新版本中手动运行docker守护程序,请使用:dockerd -D
Luis Miguel Serrano

14

如果收到消息Can't connect to docker daemon. Is 'docker -d' running on this host?,则可以通过进行检查docker version

如果您看到类似Docker Client正在运行的信息但是Docker Server不是,显然您需要启动Docker服务器。

在CentOS中,您可以service用来启动或停止Docker服务器。

$ sudo service docker stop
$ sudo service docker start

然后,输入之后docker version,您将获得Docker Client和Docker Server的信息,并且Docker守护程序已启动。


2
sudo service docker start在Ubuntu 14.04上也为我工作。
funroll '16

Cent OS 7,每次我启动docker时都要做。
帕迪

@Paddy您需要在声明服务后启用它,如果系统启动并且它将在后台运行,它将运行。
CrazyMerlin

所有这些回答如下:“您需要sudo systemctl start docker”始终假定存在要启动的docker服务。如果安装docker时遇到任何问题,则可能甚至不存在服务配置文件,在这种情况下,您会得到:“未加载Unit docker.service”
CrazyMerlin

12

执行a ps aux | grep docker以查看守护程序是否正在运行。如果不运行/etc/init.d/docker start


5
我也有同样的问题。'ps'表明我的docker进程仍在运行。
乔纳森·哈特利

停止并启动泊坞窗(已经在运行)理顺了我。
凯尔2014年

14
sudo service docker start告诉我“码头工人开始/运行,进程4633”,然后sudo service docker status告诉我“码头工人停止/等待”
Pierre de LESPINAY 2015年

12

安装后我重新启动Docker:

$ sudo service docker stop
$ sudo service docker start

而且有效。


9

我有类似的问题。我必须注销并再次登录到Shell,因为我刚刚安装了Docker,并且在我的环境中未显示以下命令。

export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc

3
我只需要注销并重新登录。所有问题都已解决!
Mark Shust在M.academy,2015年

这解决了我的问题!我将Ubuntu 16.04作为WSL运行。我唯一需要更改的是默认端口号:export DOCKER_HOST = 127.0.0.1:2375 >>〜/ .bashrc
Alex

9

我已经遇到了这个问题,我使用以下命令重新启动了Docker:

$ sudo service docker stop
$ sudo service docker start

但是我没有解决我的问题,因为我忘记了不执行Docker命令sudo。对于那些面临此问题的人,请尝试进行检查。

尝试

$ sudo docker info

代替这个:

$ docker info

当试图在Ubuntu Xenial 上运行时,这正是我的问题docker build
ashnazg '16

9

您可以使用以下命令

sudo service docker stop && sudo service docker start

简单地启动它。


3
或者sudo service docker restart,它更容易😊
fr1sk

8

我有相同的错误,尝试docker-machine regenerate-certseval..没有为我工作。

在OS X 10.11.3(El Capitan)和Docker v1.10.1上使用。我只能通过再次删除并重新创建docker-machine来修复它。资源

如果运行docker-machine ls,它将显示与以下输出类似的输出;

DOCKER

未知

错误

无法查询Docker版本:无法连接到Docker引擎端点

尝试使用删除您的Docker计算机;

docker-machine rm -f default

default您的Docker机器名称在哪里。然后;

docker-machine create -d virtualbox default

创建一个新的Docker计算机。

仔细检查,现在一切看起来都很正常(没有错误或未知的Docker),方法如下:

docker-machine ls

最后,不要忘了运行,"$(docker-machine env default)"然后继续或运行为您执行此操作的Docker Quickstart Terminal ...


6

我遇到了同样的问题-“无法连接到docker daemon”。(除非在尝试启动服务器时没有出现“找不到文件”错误)。

“ ps”表明“ / usr / bin / docker -d”仍在运行

我意识到,尽管我自己实际上从未成功运行过服务器。每一次尝试都产生了

...
2014/03/24 21:57:29 pid file found, ensure docker is not running or delete /var/run/docker.pid

因此,我后来才意识到,安装docker可能已经在守护程序upstart中注册了守护进程,从而为我启动了它。因此,尝试杀死守护程序以手动重新启动它会失败(不允许操作)。所以我做了一个

sudo kill -9 <PID>

在守护进程上。另一个守护进程立即取代了它,现在这个新的DOES让我的CLI客户端连接:

$ sudo docker info
Containers: 0
Images: 0
Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
WARNING: No memory limit support
WARNING: No swap limit support

6

尝试将当前用户添加到docker组:

sudo usermod -aG docker $USER

然后注销并登录。


6

使用Docker CE应用

苹果系统

使用适用于macOS 的新Docker社区版应用程序。例如:

  1. 卸载到目前为止已安装的所有Docker Homebrew软件包:

    brew uninstall docker-compose
    brew uninstall docker-machine
    brew uninstall docker
    
  2. 手动或通过Homebrew-Cask安装应用程序:

    brew cask install docker
    

    注意:这个程序将创建必要的环节dockerdocker-composedocker-machine,等。

  3. 运行应用程序后,在状态菜单中签出Docker鲸鱼图标。

  4. 现在,你应该能够使用dockerdocker-composedocker-machine命令像往常一样在终端

有关:

Linux /视窗

从下载页面下载Docker CE,然后按照说明进行操作。


2018-5-20注意:macOS上的Docker CE应用非常糟糕。每次打开它时,它只会冻结在正确的方向,无法执行任何操作。我尝试使用Google并解决问题,但到目前为止仍在解决
NamNamNam '18

1
这是所报告问题的正确答案,谢谢!
paranza

6

我知道这篇文章已经有很多答案了。我只想补充一个解决上述问题的简单答案。

sudo systemctl start docker

运行上面的命令,它将启动所有与docker相关的线程/服务。


5

我只是在Amazon AWS上运行时遇到了同样的问题。

这是我尝试的:

  • docker-machine使用现有的AWS实例在本地设置
  • 使用的通用设置
  • 有点连接,但是由于远程端口已关闭,因此失败
  • 之后,Docker守护程序拒绝启动,但是运行dockerd确实可行...

在远程计算机上进行了以下测试:

service docker start # Also restart, no success
systemctl start docker # Also restart, no success
dockerd # Success

我删除/var/lib/docker并卸载了所有内容,但是重新安装后没有成功。不幸的是,我没有因故障而存储任何日志,docker.service只是拒绝启动。

但是,最终解决了我的问题的基本上是:

sudo usermod -aG docker $(whoami)

4

跟随Docker的DOC站点:以非root用户身份管理Docker

1)创建Docker组

sudo groupadd docker 

2)使用户属于docker组以获取组的特权。

sudo usermod -aG docker $USER

检查是否为您的外壳程序设置了DOCKER_HOST环境变量。

env | grep DOCKER_HOST

如果有的话

unset DOCKER_HOST

然后这应该工作:

docker run hello-world

1
您是unset DOCKER_HOST为我工作的
救生员

4

如果您正在使用Docker工具在OS X上运行,请遵循以下步骤。

重新启动守护程序并配置您的环境:

docker-machine restart

然后

docker-machine env

最后,

eval $(docker-machine env)

要测试守护程序是否正在运行:

docker ps -adocker-machine ls。这将列出所有容器。


2

我遇到了同样的问题。在CentOS 6.5中:

ps aux |grep `cat /var/run/docker.pid`

如果显示不存在Docker守护进程,则输入:

docker -d

然后Ctrl+ D停止Docker。因为我们使用该-d选项,所以Docker将作为守护程序运行。现在我们可以做:

service docker start

然后我可以做一个docker pull centos。就这样。

注意:如果这些方法不起作用,则可以尝试执行yum update,然后再次重复这些步骤,因为我yum install先于这些。


2

泊坞窗服务可能没有运行。

如果您使用的是RedHat / Fedora / CentOS,请尝试以下操作:

sudo systemctl start docker

如果您使用的是Ubuntu / Debian:

sudo service start docker

Docker将开始在您的主机和相应端口上运行。


1

检查您是否正在使用Docker Machine :)

运行docker-machine env default应该可以解决问题。

因为根据文档:

Docker Machine是一种工具,可让您在虚拟主机上安装Docker Engine,并使用docker-machine命令管理主机。您可以使用Machine在本地Mac或Windows盒,公司网络,数据中心或AWS或Digital Ocean等云提供商上创建Docker主机。

使用docker-machine命令,您可以启动,检查,停止和重新启动托管主机,升级Docker客户端和守护程序,以及配置Docker客户端以与您的主机进行通信。

将计算机CLI指向正在运行的托管主机,您可以docker直接在该主机上运行 命令。例如,运行 docker-machine env default指向一个名为的主机default,按照屏幕上的说明完成env设置,然后运行docker psdocker run hello-world等等。

https://docs.docker.com/machine/overview/


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

1

要解决此问题,您需要在终端中发出以下命令。我将解释每个步骤:

# Uninstall Docker from apt packages
$ sudo apt-get remove docker docker.io

# Remove it from the libraries just to be
# sure it's gone forever
$ sudo rm -rf /var/lib/docker/*

现在,如果您想简化事情并获得更多时间,则可以使用参数运行我的init脚本installDocker

# Pull the init script from GitHub
$ wget https://github.com/dminca/dotfiles/blob/master/init

# Add rights to run the script
$ chmod 755 init

# Just run the script with the installDocker parameter
$ ./init installDocker

重新启动是可选的,但是我建议您这样做以确保所有操作都能顺利进行。


1

我在Ubuntu 14.04上运行Docker 1.10时遇到了相同的问题,但给出的答案均无效。对我来说,解决方法是在运行Docker守护程序时指定存储驱动程序。

sudo docker daemon --storage-driver=devicemapper

1

如果您使用gitlab-ci / gitlab-runners,那么如果您没有访问权限,则会收到该错误/var/run/docker.sock

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

解决问题:

sudo usermod -aG docker gitlab-runner

验证:

sudo -u gitlab-runner -H docker info

希望能有所帮助。


0

如果重新生成TLS证书不起作用

docker-machine regenerate-certs default

尝试重新启动docker机器并设置env变量:

docker-machine restart default
eval $(docker-machine env default)

检查机器是否正在运行:

docker-machine ls

或者

docker run hello-world

这对我有用。但是,如果您仍然没有启动守护程序,则Docker的故障排除页面将详细说明停止,移除和创建新机器的过程。


0

我还遇到了“无法连接到Docker守护程序。Docker守护程序在此主机上运行吗?”的问题。

我忘了使用sudo。希望它能对我们一些人有所帮助。

$:docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

$:sudo docker images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE
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.