Docker 命令无法连接到 Docker 守护进程
Posted
技术标签:
【中文标题】Docker 命令无法连接到 Docker 守护进程【英文标题】:Docker command can't connect to Docker daemon 【发布时间】:2016-02-07 07:46:04 【问题描述】:我想转向 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 命令,但无济于事。我在这里做错了什么?
【问题讨论】:
同样的问题。我也在 Ubuntu 15.10 上:( 同样的问题,ubuntu 15.10 只需重新启动您的 docker 服务即可。谢谢@jimsudo service docker restartNasruddin,那肯定不适合我... :-( 我必须重新启动机器才能使其工作。 【参考方案1】:
我可以通过运行以下命令来解决这个问题:
sudo mv /var/lib/dpkg/info/docker-ce* /tmp
【讨论】:
【参考方案2】:您需要将当前用户添加到 docker 组,如下所示:
sudo usermod -aG docker $(whoami)
然后注销并再次登录进入系统或重新启动系统。
由docker version
测试
有关如何安装 docker-engine 的更多信息,请关注docker documentation
【讨论】:
愚蠢,但它也对我有用@RobinLoxley,这应该是一个实际的答案,而不仅仅是评论,如果你发布它,请告诉我,我会给你一个赞成票;) 我会在“注销并再次登录系统或重新启动系统”下划线 @Junaid 回答下面显示了如何避免注销/登录步骤,以防您像我一样懒惰不想重新启动您的应用程序;) 这正是 Docker 教程中提到的内容,但是注销并重新登录对我不起作用。我必须重新启动系统才能使其正常工作。 我看到了 docker 版本信息,但是在输出的最后,我看到了Cannot connect to the Docker daemon. Is the docker daemon running on this host?
【参考方案3】:
在 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
【讨论】:
【参考方案4】:也许这会对某人有所帮助,因为错误消息非常无用,而且我已经多次执行所有标准权限步骤但无济于事。
Docker 偶尔会保留阻止访问的幽灵环境变量,尽管您的系统已正确设置。如果您曾经让它在某个时间运行并且在重新启动后它刚刚停止合作,则以下 shell 命令可能会使其再次可访问:
unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps
我之前安装了一个可以运行的 docker 安装程序,但在重新启动我的笔记本电脑后它只是拒绝工作。已正确添加到 docker 用户组,对套接字具有正确的权限等,但仍然无法运行 docker login
、docker run ...
等。这为我修复了它。不幸的是,我必须在每次重新启动时运行它。 This is mentioned on a couple of github issues also 作为一种解决方法,虽然这似乎是一个错误,这是正确操作 Docker 的一个持久障碍(注意:我使用的是 Arch Linux,而不是 OSX,但这对我来说是同样的问题)。
【讨论】:
【参考方案5】:我遇到了同样的问题。苦苦挣扎了两天才解决。
只有当我这样做时它才有效:
根据Docker's Tutorial,如果尚未添加 Docker 密钥,则需要添加:
$ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -
然后确保您使用以下方式授予自己 docker 权限:
$ sudo usermod -aG docker $USER
希望这对你也有帮助。
【讨论】:
第二步可以简化为:sudo usermod -aG docker $USER
【参考方案6】:
授予非 root 访问权限 - 来自 docker
如果 docker 组不存在,则添加它。
$ sudo groupadd docker
将连接的用户“$USER”添加到 docker 组。
更改用户名以匹配您的首选用户。
您可能需要注销并重新登录 这将生效。
$ sudo gpasswd -a $USER docker
重启 Docker 守护进程。
$ sudo service docker restart
【讨论】:
【参考方案7】:有同样的问题,对我有用的是: 检查 /var/run/docker.sock 的所有权
ls -l /var/run/docker.sock
如果您不是所有者,则使用命令更改所有权
sudo chown *your-username* /var/run/docker.sock
然后您可以继续尝试轻松执行 docker 命令 :D
【讨论】:
在用尽所有其他可能性之后,这就是我在 Sabayon/Gentoo Linux 上工作的原因。 该文件归root
所有,但在docker
组中。正确的方法是将您当前的用户分配到docker
组,根据 Docker 的文档:sudo groupadd docker && sudo usermod -aG docker $USER
【参考方案8】:
对于 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"
然后重新启动您的计算机。
【讨论】:
【参考方案9】:将当前用户添加到 docker 组:
sudo usermod -aG docker $(whoami)
【讨论】:
请将其格式化为代码!并解释这个命令。并使用选项的长版本(以--
开头)。【参考方案10】:
-
我也遇到了同样的问题。问题出在分配给 docker-daemon 和 docker-client 的套接字中。
首先,在 docker.sock 上没有为 docker-client 设置权限您可以使用“sudo usermod -aG docker $USER”进行设置
然后检查 docker-client 运行的 bash 文件,对我来说它位于 0.0.0.0:2375,而 docker-daemon 在 unix socket 上运行。(它是在 dockerd 的配置文件中设置的)。
只需注释 bash 行即可。
但如果你想让它在 TCP 端口而不是 unix 套接字上工作,请更改 dockerd 的配置文件并将其设置为 0.0.0.0.2375 并保持 bash 中的行(如果存在)或将其设置为 0.0 .0.0:2375。
【讨论】:
【参考方案11】:由于 docker 在启动时绑定到 root 拥有的 unix 套接字,因此使用 'sudo' 和 docker 命令将起作用。
【讨论】:
【参考方案12】:对于 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 sytemctl unmask docker.service
现在服务将被启用,如下图所示
【讨论】:
【参考方案13】:我在运行 docker 时遇到了同样的问题。
您可以以 sudo 用户身份运行命令:
sudo docker ***your command here***
【讨论】:
【参考方案14】:对于那些已经尝试重新启动机器的人,按照docker env documentation 中的说明取消设置环境变量 DOCKER_HOST,其余的只是尝试使用
sudo service docker restart
即使在重新启动机器后,也只有这对我有用。
【讨论】:
如果您只注销并登录,则必须这样做。【参考方案15】:安装完所有东西并启动服务后,尝试关闭终端并再次打开它,然后尝试拉取图像
编辑
我又遇到了这个问题,如果上面的解决方案不起作用,请尝试this solution,即下面的命令
sudo mv /var/lib/docker/network/files/ /tmp/dn-bak
注意事项
如果上面的命令有效,您可能遇到了网络 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个月再次没有问题)您的OS是否会得到这个再次出现问题,如果是错误或安装问题
我的 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
【讨论】:
【参考方案16】:对于 OSX:
打开 docker 并通过快速启动终端 (https://docs.docker.com/engine/installation/mac/) 启动“默认”机器后,您尝试使用 docker 命令并收到“无法连接到 docker daemon”消息,事实证明您需要一些环境变量集:
eval "$(docker-machine env default)"
然后用docker run hello-world
试试看是否一切都很好。
【讨论】:
【参考方案17】:尝试在您正在运行的命令中使用“sudo”。
【讨论】:
“我尝试 sudo'ing 命令,但无济于事。有人知道我在这里做错了什么吗?欢迎所有提示!”【参考方案18】:我在 Amazon EC2 实例上遇到了同样的错误。重启实例后问题得到解决。
【讨论】:
【参考方案19】:这个问题目前在 Google 搜索中排名第三。在对我的 Linux 系统上解决这个问题进行了一些研究之后,我想我会写这个答案。原始帖子指出问题出在 Ubuntu 上,但我在使用 Fedora 时也遇到了问题。考虑到这一点,这就是我为解决问题所做的工作。
在 Fedora 22 上
安装 Docker:
$> curl -fsSL https://get.docker.com/ | sh
安装 Docker 后:
需要将用户添加到 docker 组。
$> sudo usermod -aG docker
docker daemon 需要启动
$> sudo service docker start
您可以将守护程序设置为在启动时启动
$> sudo chkconfig docker on
您可以验证 docker 服务是否正在运行
$> service docker status
最后一次检查
$> docker run hello-world
【讨论】:
在 Fedora 23 上,这个组可能被称为dockerroot
。此外,您可能希望从存储库(而不是 curl ... | sh
)安装它,以便以后更新:dnf install docker
很多没有“docker”组,所以我们要先添加groupadd docker
,再添加到你的用户名sudo usermod -aG docker your_username
【参考方案20】:
将用户添加到 docker 组
如果 docker 组不存在,则添加它:
sudo groupadd docker
将连接的用户“$USER”添加到docker组:
sudo gpasswd -a $USER docker
重启 Docker 守护进程:
sudo service docker restart
要么执行newgrp docker
要么注销/登录以激活对
组。
【讨论】:
看来newgrp docker
是shell 本地的,而不是登录会话。这一点从手册页上看不清楚。
为我工作。谢谢!
唯一有效的答案!在私有云 Linux 机器上,它仍然可以工作!
在 Ubuntu 18.04 上工作!谢谢【参考方案21】:
通常,以下命令可以解决问题:
sudo service docker restart
这个,而不是 docker start
用于 Docker 似乎已经在运行的情况。
如果可行,那么按照建议和另一个答案以及此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
而且,和以前一样,你很可能会很顺利。
【讨论】:
/var/run# service docker status [FAIL] Docker 没有运行...失败!【参考方案22】:自我注意:当我忘记使用sudo
运行docker
命令时,我从问题的标题中得到错误:
sudo docker run ...
[Ubuntu 15.10]
【讨论】:
【参考方案23】:以 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强>”的东西。
【讨论】:
那个“wget”的东西只是把docker存储库放在你的apt源中......即要求您以“正确和正式的方式”手动执行相同的操作.... 恐怕你错了,阿拉尔。 “wget”方法将在您的 apt 源中添加 docker 存储库,这很好,但它也会做许多其他不好的事情,例如设置 DOCKER_HOST 环境变量,这将阻止 docker 开箱即用地运行。不是因为这两种方法都将 docker 添加到 repo 中,所以它们都是相同的。【参考方案24】:在 Ubuntu 上安装 docker 后,我运行了以下命令:
sudo service docker start
你试过了吗?
【讨论】:
以上是关于Docker 命令无法连接到 Docker 守护进程的主要内容,如果未能解决你的问题,请参考以下文章
无法连接到 Docker 守护程序。 docker 守护进程是不是在此主机上运行?
无法连接到 unix:/var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是不是正在运行?
Docker-Compose 无法连接到 Docker 守护进程
Mac OS X sudo docker 无法连接到 Docker 守护程序。 docker 守护进程是不是在此主机上运行?
无法连接到 tcp://localhost:2375/ 上的 Docker 守护程序。 docker 守护进程是不是正在运行。在 GitLab 上