ChatGPT解决这个技术问题 Extra ChatGPT

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

我想转向 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 服务即可。谢谢@jim
sudo service docker restart
Nasruddin,那肯定对我不起作用... :-(
我必须重新启动机器才能使其工作。

u
user11272717

您需要将当前用户添加到 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?
J
Jun

将用户添加到 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 上工作!谢谢
D
Dimitris Fasarakis Hilliard

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

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

而且,和以前一样,你很可能会很顺利。


/var/run# service docker status [FAIL] Docker 没有运行……失败!
M
MartyIX

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

sudo docker run ...

[Ubuntu 15.10]


k
kevthanewversi

有同样的问题,对我有用的是:检查 /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
y
yushulx

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

sudo service docker start

你试过了吗?


C
Community

安装完所有内容并启动服务后,尝试关闭终端并再次打开它,然后尝试拉取您的图像

编辑

我也再次遇到了这个问题,如果上面的解决方案不起作用,请尝试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 个月再次没有问题)时,您的操作系统是否会再次出现此问题,以及是否是错误或安装问题

我的码头工人版本

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

r
rollstuhlfahrer

我有同样的问题。苦苦挣扎了两天才解决。

它仅在我这样做时才有效:

根据 Docker 的教程,如果尚未添加 Docker 密钥,则需要添加: $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add - 然后确保您使用以下命令授予自己 docker 权限:$ sudo usermod -aG docker $USER

希望这对你也有帮助。


第 2 步可以简化为:sudo usermod -aG docker $USER
D
Daniel Loureiro

以 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 中,所以它们都是相同的。
k
kramer65

对于 OSX:

打开 docker 并通过快速启动终端 (https://docs.docker.com/engine/installation/mac/) 启动“默认”机器后,您尝试使用 docker 命令并收到“无法连接到 docker daemon”消息,事实证明您需要设置一些环境变量

eval "$(docker-machine env default)"

然后用 docker run hello-world 试试看是否一切都很好。


M
Mr.Moe

对于那些已经尝试重新启动机器的人,请按照 docker env documentation 中的说明取消设置环境变量 DOCKER_HOST,其余的只是尝试使用

sudo service docker restart

即使在重新启动机器后,只有这对我有用。


如果您只注销和登录,则需要这样做。
C
Community

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

如果 docker 组不存在,请添加它。

$ sudo groupadd docker

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

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

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

$ sudo gpasswd -a ${USER} docker

重新启动 Docker 守护程序。

$ sudo service docker restart

R
Ronald Weidner

这个问题目前在谷歌搜索中排名第三。在对我的 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
许多人没有“docker”组,所以我们必须先添加它groupadd docker,然后将它添加到您的用户名sudo usermod -aG docker your_username
T
Thiago Falcao

在 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

u
user3737461

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


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

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

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

sudo docker ***your command here***

l
lordzuko

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

https://i.stack.imgur.com/LTIHj.png

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

sudo sytemctl unmask docker.service

https://i.stack.imgur.com/R6Rza.png


r
raja

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


N
Nilesh Kande

我也有同样的问题。问题出在分配给 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.


m
mopsyd

也许这会对某人有所帮助,因为错误消息非常无用,而且我已经多次完成所有标准权限步骤但无济于事。

尽管您的系统已正确设置,但 Docker 偶尔会保留阻止访问的幽灵环境变量。如果您曾经让它在某个时间运行并且在重新启动后它刚刚停止合作,则以下 shell 命令可能使其再次可访问:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

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


R
Raghav

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

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

S
Sumit Bhoyar

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


J
Jannik Weichert

将当前用户添加到 docker 组:

sudo usermod -aG docker $(whoami)


请将其格式化为代码!并解释这个命令。并使用选项的长版本(以 -- 开头)。
j
jrbedard

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

然后重新启动计算机。