首页 文章

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

提问于
浏览
226

我想转移到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命令,但无济于事 . 我在这做错了什么?

23 回答

  • 9

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

    你可以像 sudo 用户那样运行命令:

    sudo docker ***your command here***
    
  • 3

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

    编辑

    我也有了这个 issue ,如果上面的解决方案不起作用,请尝试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
    

    你真的遇到了网络问题,但是我不知道下次你重新启动时( update ,2个月没有问题)你的 OS 会再次出现这个问题,如果它是一个bug或安装问题

    我的码头版

    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
    
  • 0

    对于 OSX

    打开docker并通过Quickstart Terminal(https://docs.docker.com/engine/installation/mac/)启动'default'机器后,尝试使用docker命令并获取"can't connect to docker daemon"消息, it turns out you need some env variables set

    eval "$(docker-machine env default)"

    然后用 docker run hello-world 尝试一下,看看是否一切都是桃子的 .

  • 6

    我有同样的问题 . 一直在努力解决它两天 .

    它只在我做的时候起作用:

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

    • 然后确保使用以下方法向自己授予docker权限:

    $ sudo usermod -aG docker $USER

    希望这对你也有帮助 .

  • 0

    以root身份输入( sudo su )并尝试:

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

    我在这里遇到同样的问题,并且docker命令只能以root身份运行,并且_114112_也是空的

    PS:还要注意Ubuntu上的correct and official way to install是使用他们的apt存储库(甚至是15.10), not with 那个“ wget ”的东西 .

  • 0

    尝试使用正在运行的命令“sudo” .

  • 0

    对于已经尝试重新启动机器的人,按照docker env documentation中的说明取消设置环境变量DOCKER_HOST,其他所有人都尝试使用

    sudo service docker restart
    

    即使在重新启动机器后,只有这样才能解决这个问题 .

  • 5

    您需要将当前用户[假设您以ubuntu身份登录]添加到docker组,如下所示

    sudo usermod -aG docker $(whoami)
    

    然后 logout & login again 进入系统或重启系统 . 测试 docker version

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

  • 5

    For Ubuntu:
    当我更新docker时发生在我身上 .
    您需要取消屏蔽服务和套接字,然后重新启动该服务 .

    以下为我工作:

    systemctl unmask docker.service
    systemctl unmask docker.socket
    systemctl start docker.service
    

    What happend behind the scenes
    systemd还可以通过将单元链接到/ dev / null来将单元标记为完全不可启动,自动或手动 . 这称为屏蔽单元,可以使用mask命令 .

    sudo systemctl mask docker.service
    

    您可以使用以下方法检查屏蔽服务列表:

    sudo systemctl list-unit-files
    

    要启用自动/手动启动服务,您需要使用以下命令取消屏蔽:

    sudo sytemctl unmask docker.service
    

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

  • 135

    给予非root用户访问权限 - 来自docker

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

    $ sudo groupadd docker
    

    将已连接的用户“$ ”添加到泊坞窗组 .

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

    您可能需要注销并重新登录才能使其生效 .

    $ sudo gpasswd -a ${USER} docker
    

    重新启动Docker守护程序 .

    $ sudo service docker restart
    
  • 2

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

    ls -l /var/run/docker.sock
    

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

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

    然后你可以继续尝试无障碍地执行docker命令:D

  • 2

    将当前用户添加到docker组:

    sudo usermod -aG docker $(whoami)

  • 10

    也许这会对某人有所帮助,因为错误信息非常无益,而且我已经多次经历了所有标准权限步骤而无济于事 .

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

    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,但这对我来说是同样的问题) .

  • 2

    在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
    
  • 1

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

  • 0

    这个问题目前在谷歌搜索中排名第3 . 在我的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
    
  • 426

    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"
    

    然后重新启动计算机 .

  • 31

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

    sudo service docker restart
    

    对于Docker似乎已经在运行的情况,而不是 docker start .

    如果那样,那么,如同建议和另一个答案以及GitHub issue,如果您还没有将自己添加到docker组中,请执行以下操作:

    sudo usermod -aG docker <your-username>
    

    你最有可能去 .


    至于碰到这个的任何其他人,在某些操作系统's docker doesn' t安装后立即开始,结果,出现相同的 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
    

    而且,和以前一样,你很可能会很高兴 .

  • 3

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

  • 8

    将用户添加到docker组

    • 添加泊坞组(如果它尚不存在):

    sudo groupadd docker

    • 将已连接的用户“$ ”添加到泊坞窗组:

    sudo gpasswd -a ${USER} docker

    • 重启Docker守护进程:

    sudo service docker restart

    • 执行 newgrp docker 或注销/以激活对组的更改 .
  • 1

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

    sudo service docker start
    

    你试过吗?

  • 3

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

    sudo docker run ...

    [Ubuntu 15.10]

  • 18
    • 我也有同样的问题 . 问题出在分配给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-line就可以了 .

    • 但是如果你想让它在TCP端口而不是unix socket上工作,可以更改dockerd的配置文件并将其设置为0.0.0.0.2375并将该行保存为bash(如果存在)或将其设置为0.0.0.0 :2375 .

相关问题