Docker命令不能连接到Docker守护进程

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

我试着执行命令,但没有效果。我哪里做错了?

264374 次浏览

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

sudo service docker start

你试过吗?

输入根(sudo su),并尝试这样做:

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

我在这里遇到了同样的问题,而且docker命令只能以根用户运行,而且DOCKER_HOST也是空的

PS:也要注意,Ubuntu上的正确和正式的安装方式是要使用他们的apt库(甚至在15.10上),不是用是“wget”的东西。

我也有同样的问题。为了解决这个问题我已经挣扎了两天了。

只有当我这样做的时候,它才起作用:

  1. 根据码头工人的教程,你需要添加Docker密钥,如果还没有添加,使用:

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

  2. 然后确保你给自己授予docker特权,使用:

    $ sudo usermod -aG docker $USER < / p >

希望这也能帮助到你。

需要将当前用户加入docker组,操作步骤如下:

sudo usermod -aG docker $(whoami)

注销,重新登录进入系统或重新启动系统。 test by docker version

有关如何安装docker-engine的进一步信息,请参见码头工人的文档

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

sudo docker run ...

(Ubuntu 15.10)

通常,下面的命令可以达到目的:

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

和之前一样,你很有可能就可以出发了。

在安装一切并启动服务后,尝试关闭终端并再次打开它,然后尝试拉出映像

编辑

我也有这个问题,如果上面的解决方案不会工作,尝试这个解决方案,这是下面的命令

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个月没有问题)你的操作系统是否会再次遇到这个问题,如果这是一个错误或安装问题

我的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组不存在,则添加docker组:

    sudo groupadd docker < / p >

  • 将连接用户${user}加入docker组:

    sudo gpasswd -a ${USER} docker < / p >

  • 重启Docker守护进程:

    sudo service docker restart < / p >

  • 执行newgrp docker或注销/登录以激活对 李组。< / p > < / >

这个问题目前在谷歌搜索中排名第三。在我的Linux系统上做了一些研究来解决这个问题之后,我想我应该写下这个答案。最初的帖子说这个问题是在Ubuntu上,但我使用Fedora时也遇到了这个问题。考虑到这一点,下面是我解决这个问题的方法。

在Fedora 22上

安装码头工人:

$> 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

我在亚马逊EC2实例上也遇到过同样的错误。该问题在重新启动实例后得到修复。

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

OSX:

在打开docker并通过快速启动终端(https://docs.docker.com/engine/installation/mac/)启动“默认”机器后,您尝试docker命令,并得到这个“无法连接到docker守护进程”消息,你需要设置一些env变量:

eval "$(docker-machine env default)"

然后用docker run hello-world试试,看看是否一切正常。

对于那些已经尝试重新启动您的机器的人,按照Docker环境文档中所述的取消设置环境变量DOCKER_HOST,其余的都只是尝试使用

sudo service docker restart

即使在重新启动机器后,也只有这一招管用。

我在运行docker时也有同样的问题。

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

sudo docker ***your command here***
< p > Ubuntu的: < br > 发生在我更新docker的时候

.使用实例 以下对我有用:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
< p > 幕后发生了什么 < br > Systemd还能够通过将一个单元链接到/dev/null,自动或手动地将其标记为完全不可启动这被称为屏蔽单元,可以使用mask命令
sudo systemctl mask docker.service

你可以使用以下方法查看屏蔽服务的列表:

sudo systemctl list-unit-files

Output of sudo systemctl list-unit-files

要启用自动/手动启动服务,您需要使用:

sudo sytemctl unmask docker.service

现在服务将被启用,如下所示 enter image description here < / p >

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

将当前用户加入docker组:

sudo usermod -aG docker $(whoami)

  1. 我也有同样的问题。问题出在分配给docker-daemon和docker-client的套接字上。
  2. 首先,docker上没有为docker-client设置权限。你可以使用"sudo usermod -aG docker $USER"来设置它
  3. 然后检查docker-client正在运行的bash文件,对于我来说,它是在0.0.0.0:2375上,而docker-daemon在unix套接字上运行。(在dockerd的配置文件中设置)
  4. 只需注释虚线,它就能正常工作。
  5. 但是如果你想让它在TCP端口而不是unix套接字上工作,请更改dockerd的配置文件,并将其设置为0.0.0.0.2375,并在bash中保持该行原样,或者将其设置为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的所有权。袜子< / p >
ls -l /var/run/docker.sock

如果您不是所有者,则使用命令更改所有者

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

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

提供非根访问-从码头工人

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

$ sudo groupadd docker

添加连接用户"${user}"到docker组。

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

您可能需要注销并重新登录

.

.
$ sudo gpasswd -a ${USER} docker

重新启动Docker守护进程。

$ sudo service docker restart

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

Docker偶尔会在阻碍访问的地方留下幽灵环境变量,尽管您的系统在其他方面是正确设置的。下面的shell命令可以使它再次可访问,如果你已经让它运行了一点,它只是在重新启动后停止合作:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

我之前安装了一个可以工作的docker,重启我的笔记本电脑后,它就是拒绝工作。被正确地添加到docker用户组,对套接字具有正确的权限,等等,但仍然不能运行docker logindocker run ...等。这为我解决了问题。不幸的是,我必须在每次重启时运行这个。这在一些github问题上也有所提及作为一个解决方案,虽然它看起来像一个错误,这是正确操作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