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

Docker command can't connect to Docker daemon

我想搬到 Docker,所以我才开始弄乱它。我已经在 VirtualBox Ubuntu 15.10 (Wily Werewolf) 安装上安装了 Docker 并且作为 suggested here I then tried running a basic 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,但无济于事。我在这里做错了什么?

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

sudo service docker start

你试过了吗?

以 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”的东西。

我遇到了同样的问题。折腾了两天才解决。

它只在我这样做时有效:

  1. 根据 Docker's Tutorial,如果尚未使用

    添加 Docker 键,则需要添加

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

  2. 然后确保您授予自己 docker 权限,使用:

    $ sudo usermod -aG docker $USER

希望这对你也有帮助。

您需要将当前用户添加到 docker 组,如下所示:

sudo usermod -aG docker $(whoami)

然后注销并重新登录进入系统或重新启动系统。 由 docker version

测试

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

自我提醒:当我忘记使用 sudo:

运行 docker 命令时,我从问题的标题中得到了错误

sudo docker run ...

[Ubuntu15.10]

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

sudo service docker restart

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

如果可行,那么按照建议和另一个答案以及此 GitHub issue,如果您还没有将自己添加到 docker 组中,请按 运行 进行操作:

sudo usermod -aG docker <your-username> 

你很可能可以走了。


至于遇到此问题的其他人,在某些 OS 中,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

而且,和以前一样,您很可能会顺利进行。

安装完一切并启动服务后,尝试关闭终端并再次打开,然后尝试拉取镜像

编辑

我也遇到了这个问题,如果上面的解决方案不起作用,请尝试下面的命令

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会再次出现这个问题,如果是bug或者安装问题

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

将用户添加到 docker 组

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

    sudo groupadd docker

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

    sudo gpasswd -a ${USER} docker

  • 重新启动 Docker 守护程序:

    sudo service docker restart

  • 执行 newgrp docker 或记录 out/in 以激活对 组。

此问题目前在 Google 搜索中排名第 3。在我的 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

您可以验证 docker 服务是 运行

$> service docker status

还有最后一次检查

$> docker run hello-world

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

尝试将 "sudo" 与您的命令一起使用 运行。

OSX

打开 docker 并通过快速启动终端 (https://docs.docker.com/engine/installation/mac/) 启动 'default' 机器后,您尝试 docker 命令并收到此 "can't connect to docker daemon" 消息, 原来你需要设置一些环境变量:

eval "$(docker-machine env default)"

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

对于已经尝试重启机器的用户,请按照 docker env documentation 中所述取消设置环境变量 DOCKER_HOST,其余的请尝试使用

sudo service docker restart

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

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

您可以 运行 命令作为 sudo 用户:

sudo docker ***your command here***

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

要启用 auto/manual 服务启动,您需要使用以下方法取消屏蔽:

sudo sytemctl unmask docker.service

现在服务将被启用,如下图所示

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

将当前用户添加到 docker 组:

sudo usermod -aG docker $(whoami)

  1. 我也遇到了同样的问题。问题出在分配给 docker-daemon 和 docker-client 的套接字中。
  2. 首先,docker-client 在 docker.sock 上未设置权限您可以使用 "sudo usermod -aG docker $USER"
  3. 进行设置
  4. 然后检查 bash 文件,其中 docker-client 是 运行,对我来说它是在 0.0.0.0:2375,而 docker-daemon 是运行 在 unix 套接字上。(它在 dockerd 的配置文件中设置)。
  5. 只需注释 bash 行即可。
  6. 但是如果你想让它在 TCP 端口而不是 unix 套接字上工作,请更改 dockerd 的配置文件并将其设置为 0.0.0.0.2375 并保留 [=24= 中的行] 如果存在或将其设置为 0.0.0.0:2375.

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

然后重新启动计算机。

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

的所有权
ls -l /var/run/docker.sock

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

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

然后您可以继续尝试轻松执行 docker 命令 :D

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

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

$ sudo groupadd docker

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

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

您可能需要注销并重新登录 这才能生效。

$ sudo gpasswd -a ${USER} docker

重新启动 Docker 守护程序。

$ sudo service docker restart

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

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

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

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

在 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

我能够通过 运行 以下命令修复该问题:

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