Docker无法连接到docker守护程序

时间:2014-02-19 05:02:22

标签: linux docker

将Docker版本更新为0.8.0后,我在输入sudo docker version时收到错误消息:

Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
2014/02/19 12:54:16 Can't connect to docker daemon. Is 'docker -d' running on this host?

我按照说明操作并输入了命令sudo docker -d,我得到了这个:

[/var/lib/docker|2462000b] +job initserver()
[/var/lib/docker|2462000b.initserver()] Creating server
open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory[/var/lib/docker|2462000b] -job initserver() = ERR (1)
2014/02/19 12:55:57 initserver: open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory

如何解决问题?

42 个答案:

答案 0 :(得分:583)

的Linux

Post-installation steps for Linux文档显示了以下步骤:

  1. 创建泊坞窗组。
    sudo groupadd docker
  2. 将用户添加到泊坞窗组。
    sudo usermod -aG docker $(whoami)
  3. 注销并重新登录,以确保docker以正确的权限运行。
  4. 启动docker。
    sudo service docker start
  5. Mac OS X

    正如Dayel Ostraco所说,添加环境变量是必要的:

    docker-machine start # Start virtual machine for docker
    docker-machine env  # It's helps to get environment variables
    eval "$(docker-machine env default)" # Set environment variables
    

    docker-machine start命令输出注释以指导过程。

答案 1 :(得分:142)

如果您在OS X上运行Docker,运行以下eval对我有用。

eval "$(docker-machine env default)"

如果您不想在每个终端会话上运行此eval语句,可以将其添加到bash_profile

#Docker
eval "$(docker-machine env default)"

请务必重新启动终端会话或在bash_profile上运行来源,以使更改生效。

答案 2 :(得分:127)

的Linux

要在Linux上运行docker守护程序(来自CLI),请运行:

$ sudo service docker start # Ubuntu/Debian

注意:复制和粘贴时跳过$字符。

在RedHat / CentOS上,运行:sudo systemctl start docker

初始化" base" filesystem,运行:

$ sudo service docker stop
$ sudo rm -rf /var/lib/docker
$ sudo service docker start

或手动喜欢:

$ sudo docker -d --storage-opt dm.basesize=20G

在Linux上安装docker-machine

在Linux上安装机器二进制文件:

  • 本地:

    install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) $HOME/bin/docker-machine
    
  • 全局:

    sudo bash -c 'install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine'
    

MACOS

在macOS上,docker二进制文件只是一个客户端,你不能用它来运行docker守护进程,因为Docker守护进程使用特定于Linux的内核功能,因此你无法在OS X中本机运行Docker。所以您必须安装docker-machine才能创建VM并附加到它。

在macOS上安装docker-machine

如果您还没有docker-machine命令,请使用以下方法之一安装它:

  • 使用Brew命令:brew install docker-machine docker
  • GitHub手动:

    install -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine
    

请参阅:Get started with Docker for Mac

在macOS上配置docker-machine

要通过Homebrew启动 Docker Machine ,请运行:

brew services start docker-machine

要创建default计算机(如果您没有,请参阅:docker-machine ls):

docker-machine create --driver virtualbox default

然后为Docker客户端设置环境:

eval "$(docker-machine env default)"

然后通过列出容器仔细检查:

docker ps

请参阅:Get started with Docker Machine and a local VM

在macOS上安装 Docker.app

除上述解决方案外,您还可以通过以下方式安装Docker应用程序:

brew cask install docker

检查post for more details。另见:Cannot connect to the Docker daemon on macOS

答案 3 :(得分:100)

经过详细调查后,每次重启Mac OS X (或重启Docker虚拟机)后,此问题似乎都会发生,这会阻止Docker客户端连接到Docker守护程序。 / p>

要解决此问题,您可以:

A)使用官方安装程序(https://www.docker.com/products/docker-toolbox)重新安装Docker Toolbox,或者只是

B)按顺序运行以下命令:

# First make sure that the virtual machine is running
docker-machine start default

# Regenerate TLS connection certs, requires confirmation
docker-machine regenerate-certs default

# Finally, set env
eval "$(docker-machine env default)"

C)与(B)相同,您还可以复制并粘贴以下行以运行所有三个命令:

docker-machine start default; docker-machine regenerate-certs default; eval "$(docker-machine env default)"

如果您收到以下错误:

Error getting SSH command: Something went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 255
output  :

再次重新运行这三个命令,它应该第二次运行。

答案 4 :(得分:40)

当您不在docker组时,通常会发生这种情况。您可以将自己添加到docker群组:

sudo usermod -aG docker yourusername

sudo usermod -aG docker $(whoami)

在此之后,您需要注销并重新登录服务器。

或者,您可以sudo每个Docker命令。

答案 5 :(得分:28)

如果上述所有其他解决方案都无效,您可以尝试检查ls -l /var/run/docker.sock 的所有权:

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

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

display:inline

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

答案 6 :(得分:16)

找出Docker无法正常工作的最佳方法是手动运行守护进程。

$ sudo service docker stop
$ ps aux | grep docker  # do this until you don't see /usr/bin/docker -d
$ /usr/bin/docker -d

Docker守护进程记录到STDOUT,因此它将开始吐出它正在做的任何事情。

以下是我的问题所在:

[8bf47e42.initserver()] Creating pidfile
2015/01/11 15:20:33 pid file found, ensure docker is not running or delete /var/run/docker.pid

这是因为该实例是从另一个虚拟机克隆的。我只需要删除pid文件,之后一切都有效。

当然,我建议不要盲目地假设这会有效,我建议再次手动运行守护进程,并在开始服务备份之前查看日志输出是否有任何其他错误。

答案 7 :(得分:14)

如果您收到Can't connect to docker daemon. Is 'docker -d' running on this host?消息,则可以docker version进行检查。

如果您看到Docker Client is running. but Docker Server is not之类的信息,显然您需要启动Docker服务器。

在CentOS中,您可以使用service启动或停止Docker服务器。

$ sudo service docker stop
$ sudo service docker start

然后,在您键入docker version后,您将获得Docker Client and Docker Server的信息,并且已启动Docker守护程序。

答案 8 :(得分:11)

安装后重启Docker:

$ sudo service docker stop
$ sudo service docker start

它有效。

答案 9 :(得分:9)

执行ps aux | grep docker以查看守护程序是否正在运行。如果没有运行/etc/init.d/docker start

答案 10 :(得分:8)

我遇到了这个问题,我使用这些命令重新启动了Docker:

$ sudo service docker stop
$ sudo service docker start

但是我没有解决我的问题,因为我忘了在没有sudo的情况下执行我的Docker命令。对于那些面临此问题的人,请尝试检查。

尝试

$ sudo docker info

而不是:

$ docker info

答案 11 :(得分:7)

我有类似的问题。我不得不注销并再次登录shell,因为我刚刚安装了Docker,并且我的环境中没有显示以下命令。

export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc

答案 12 :(得分:7)

我遇到同样的错误,尝试docker-machine regenerate-certseval..对我不起作用。

这在OS X 10.11.3(El Capitan)和Docker v1.10.1上。我只能通过删除并重新创建docker-machine来修复它。 Source

如果正在运行docker-machine ls,它会显示与下面相似的输出;

  

泊坞

     

未知

     

错误

     

无法查询docker版本:不能   连接到docker引擎端点

尝试使用;

删除Docker机器
docker-machine rm -f default

default是您的Docker计算机名称。然后;

docker-machine create -d virtualbox default

创建一个新的Docker机器。

使用:

仔细检查现在一切正常(没有错误或未知的Docker)
docker-machine ls

最后不要忘记在继续或运行Docker Quickstart终端之前运行"$(docker-machine env default)",它会为您完成...

答案 13 :(得分:6)

尝试将当前用户添加到docker组:

sudo usermod -aG docker $USER

然后注销并登录。

答案 14 :(得分:5)

我遇到了同样的问题 - &#34;无法连接到docker守护程序。&#34; (除了我没有找到任何&#39;文件未找到&#39;尝试启动服务器时出错。)

&#39; PS&#39;显示&#34; / usr / bin / docker -d&#34;还在运行

我意识到我自己从未真正成功地运行过服务器。每次尝试都产生了

...
2014/03/24 21:57:29 pid file found, ensure docker is not running or delete /var/run/docker.pid

所以我姗姗来迟地意识到安装docker可能已经用upstart注册了守护进程,这已经为我启动了它。因此,尝试终止守护进程以手动重启它失败(操作不允许)。所以我做了一个

sudo kill -9 <PID>

守护进程。另一个守护进程立即取而代之,这个新守护进程现在让我的CLI客户端连接:

$ sudo docker info
Containers: 0
Images: 0
Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
WARNING: No memory limit support
WARNING: No swap limit support

答案 15 :(得分:4)

如果您使用Docker工具在OS X上运行,请按照此步骤操作。

重新启动守护程序并配置您的环境:

docker-machine restart

然后

docker-machine env

最后,

eval $(docker-machine env)

测试守护程序是否正在运行:

docker ps -adocker-machine ls。这将列出所有容器。

答案 16 :(得分:4)

在2020年4月的Mac OS OS Catalina上,您只需要打开桌面应用程序enter image description here

答案 17 :(得分:4)

我遇到了同样的问题,在Amazon AWS上运行。

这是我的尝试:

  • 使用现有的AWS实例在本地设置docker-machine
  • 使用的通用设置
  • 它有点连接,但由于远程端口已关闭,因此失败
  • 之后,Docker守护程序拒绝启动,但运行dockerd确实有效......

在远程机器上进行了测试:

service docker start # Also restart, no success
systemctl start docker # Also restart, no success
dockerd # Success

我删除了/var/lib/docker并卸载了所有内容,但重新安装后没有成功。不幸的是,我没有存储失败的日志,但docker.service只是拒绝启动。

然而,最终解决了我的问题的基本上是:

sudo usermod -aG docker $(whoami)

答案 18 :(得分:3)

关注Docker的DOC网站:Manage Docker as a non-root user

1)创建Docker组

sudo groupadd docker 

2)让用户属于docker组以获得该组的权限。

sudo usermod -aG docker $USER

检查是否为shell设置了DOCKER_HOST环境变量。

env | grep DOCKER_HOST

如果存在,

unset DOCKER_HOST

然后这应该有效:

docker run hello-world

答案 19 :(得分:3)

使用Docker CE app

MACOS

将新的 Docker Community Edition app 用于macOS。例如:

  1. 卸载到目前为止已安装的所有Docker Homebrew软件包:

    brew uninstall docker-compose
    brew uninstall docker-machine
    brew uninstall docker
    
  2. 安装应用manually或通过Homebrew-Cask

    brew cask install docker
    

    注意:此应用会创建指向dockerdocker-composedocker-machine等的必要链接。

  3. 运行应用程序后,请在状态菜单中查看Docker whale图标。

  4. 现在,您应该可以像往常一样在终端中使用dockerdocker-composedocker-machine命令。
  5. 相关:

    Linux / Windows的

    下载Docker CE from the download page并按照说明操作。

答案 20 :(得分:2)

Docker Service可能没有运行。

如果您使用的是RedHat / Fedora / CentOS,请尝试以下操作:

sudo service start docker

如果您使用的是Ubuntu / Debian:

com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Docker将开始在您的主机和相应端口上运行。

答案 21 :(得分:2)

我遇到了同样的问题。在CentOS 6.5中:

ps aux |grep `cat /var/run/docker.pid`

如果它没有显示Docker守护程序进程,那么我输入:

docker -d

然后 Ctrl + D 停止Docker。因为我们使用-d选项,所以Docker将作为守护进程运行。现在我们可以做到:

service docker start

然后我可以做docker pull centos。就是这样。

注意:如果这些不起作用,您可以尝试yum update,然后重复这些,因为我yum install之前会这样做。

答案 22 :(得分:1)

You can use the command

sudo service docker stop
sudo service docker start

to simply start it.

答案 23 :(得分:1)

我知道这篇文章已经有很多答案了。我只想添加一个简单的答案即可解决上述问题。

sudo systemctl start docker

运行以上命令,它将启动所有与docker相关的线程/服务。

答案 24 :(得分:1)

  1. 我也有同样的问题。问题出在分配给docker-daemon和docker-client的套接字中。
  2. 首先,没有为docker.sock上的docker-client设置权限你可以使用&#34; sudo usermod -aG docker $ USER&#34;
  3. 设置它
  4. 然后检查运行docker-client的bash文件,对我来说它是在0.0.0.0:2375,而docker-daemon在unix socket上运行。(它在dockerd的配置文件中设置)。 / LI>
  5. 只需评论bash-line就可以了。
  6. 但是如果你想让它在TCP端口而不是unix socket上运行,可以更改dockerd的配置文件,并将其设置为0.0.0.0.2375,并将该行保留为bash,如果存在,则将其设置为0.0 .0.0:2375

答案 25 :(得分:1)

我在Ubuntu 14.04上运行Docker 1.10时遇到了同样的问题,并且没有给出任何给定的答案。对我来说,修复是在运行Docker守护程序时指定存储驱动程序。

sudo docker daemon --storage-driver=devicemapper

答案 26 :(得分:1)

要修复,您需要在终端中发出以下命令。我将解释每一步:

# Uninstall Docker from apt packages
$ sudo apt-get remove docker docker.io

# Remove it from the libraries just to be
# sure it's gone forever
$ sudo rm -rf /var/lib/docker/*

现在,如果您想要简化并节省更多时间,可以使用参数installDocker运行我的init script

# Pull the init script from GitHub
$ wget https://github.com/dminca/dotfiles/blob/master/init

# Add rights to run the script
$ chmod 755 init

# Just run the script with the installDocker parameter
$ ./init installDocker

重启是可选的,但我建议您这样做,以确保所有运行顺利。

答案 27 :(得分:1)

检查您是否使用Docker Machine:)

运行docker-machine env default应该可以解决问题。

因为根据文件:

  

Docker Machine是一款可让您安装Docker Engine的工具   虚拟主机,并使用docker-machine命令管理主机。您   可以使用Machine在本地Mac或Windows上创建Docker主机   框,公司网络,数据中心或云端   AWS或Digital Ocean等提供商。

     

使用docker-machine命令,您可以启动,检查,停止和   重新启动托管主机,升级Docker客户端和守护程序,以及   配置Docker客户端与主机通信。

     

将Machine CLI指向正在运行的托管主机,然后即可运行   docker直接在该主机上发出命令。例如,运行   docker-machine env default指向名为default的主机,按照屏幕显示   有关完成env设置并运行docker ps的说明,   docker run hello-world,等等。

https://docs.docker.com/machine/overview/

答案 28 :(得分:0)

通常这种情况不会发生。但有一天,这条消息出现了(如下所示),简单的重启就解决了

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

答案 29 :(得分:0)

我也遇到了问题&#34;无法连接到Docker守护程序。 docker守护程序是否在此主机上运行?&#34;。

我忘了使用sudo。希望它能帮助我们中的一些人。

$:docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

$:sudo docker images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE

答案 30 :(得分:0)

要解决此问题,我必须启用docker服务:

sudo systemctl enable /usr/lib/systemd/system/docker.service

答案 31 :(得分:0)

尝试更改docker中的Docker配置文件docker-network/etc/sysconfig

(... ~v1.17)

docker档案:

OPTIONS= -H fd://

或(v1.18):

docker-network档案:

DOCKER_NETWORK_OPTIONS= -H unix:///var/run/docker.sock

答案 32 :(得分:0)

已经有很多答案,但是希望对大家有所帮助。通过snap安装docker时会出现此问题。通过sudo运行将允许您连接到守护程序,但这会导致其他问题。解决方案是在安装快照包之前执行一些步骤,以制作完整的步骤列表:

sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
sudo snap install docker

完成此操作后,docker将连接到守护程序,并且无需sudo即可工作,无需重新启动。

https://github.com/docker-archive/docker-snap/issues/1#issuecomment-423778054

答案 33 :(得分:0)

在Docker安装有snap的情况下,有时在重新引导计算机时会遇到OP的错误。就我而言,运行sudo snap logs docker会在日志中显示错误:

启动守护程序时出错:找到pid文件,请确保docker未运行或删除/var/snap/docker/423/run/docker.pid

运行sudo rm /var/snap/docker/423/run/docker.pid之后,我可以正常启动Docker。

答案 34 :(得分:0)

您是否尝试过将其关闭再打开? : - )

在我的Mac上升级到Docker 1.10.1后,我遇到了同样的问题。 我做了以下事情:

在Docker快速入门终端上

  

$ exit

     

$ exit

然后

  

docker-machine kill default

然后重新启动Docker Quickstart Terminal

这解决了我的问题。

答案 35 :(得分:0)

如果您使用gitlab-ci / gitlab-runners,如果您无权访问/var/run/docker.sock,则会收到该错误。

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

要解决此问题:

sudo usermod -aG docker gitlab-runner

验证:

sudo -u gitlab-runner -H docker info

希望有帮助。

答案 36 :(得分:0)

在Mac OS-X上,这可能意味着Docker安装已过时或未运行。只需从官方网站下载最新的docker并安装它。

为我工作。

答案 37 :(得分:0)

我很惊讶没有人回答这个问题:

create or replace Procedure SP_CUSTOMER_PRODUCT_QRY
   ( PARENT_PARTYID IN varchar2,PRODUCT_ID IN varchar2,PRODUCT_STATUS IN varchar2,PAGING  IN varchar2,OFFSET IN varchar2,LIST_OF_PARTIES OUT VARCHAR2 )
AS
V_SQL_WHERE varchar2(10000):= null;
V_SQL varchar2(10000):='SELECT PARTYID FROM TABLE1';
    V_check varchar2(10000) := '' ;
BEGIN

    IF(PARENT_PARTYID IS NOT NULL) THEN
      V_SQL_WHERE := V_SQL_WHERE || ' PARENT_PARTYID=:1';
    END IF; 

    IF(PRODUCT_ID IS NOT NULL) THEN

      IF (V_SQL_WHERE is not null) THEN 
        V_SQL_WHERE := V_SQL_WHERE || ' AND ';
      END IF;

      V_SQL_WHERE := V_SQL_WHERE || ' PRODUCT_ID=:2';
    END IF; 

    IF(PRODUCT_STATUS IS NOT NULL) THEN

      IF (V_SQL_WHERE is not null) THEN 
         V_SQL_WHERE := V_SQL_WHERE || ' AND ';
      END IF; 
      V_SQL_WHERE := V_SQL_WHERE || ' PRODUCT_STATUS=:3';

    END IF; 

    IF (V_SQL_WHERE is not null) then
      V_SQL := V_SQL || ' WHERE ' || V_SQL_WHERE;
    end if;


    dbms_output.put_line(V_SQL);
        EXECUTE IMMEDIATE V_SQL INTO LIST_OF_PARTIES;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      V_check:= '' ;
    END;

如果您同时运行docker和docker-compose

,请执行此操作

答案 38 :(得分:0)

您可以使用以下命令运行守护程序:

sudo nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &

该脚本使守护进程在后台运行,并且在准备好Docker之后,您可以测试它是否正在接受命令。

sudo docker info

了解更多信息请查看: https://www.upcloud.com/support/how-to-configure-docker-swarm/

答案 39 :(得分:0)

如果重新生成TLS证书不起作用

docker-machine regenerate-certs default

尝试重新启动docker机器并设置env变量:

docker-machine restart default
eval $(docker-machine env default)

检查机器是否正在运行:

docker-machine ls

或者

docker run hello-world

这对我有用。但是,如果您仍然没有守护程序,Docker's troubleshooting page详细说明了停止,删除和创建新计算机的过程。

答案 40 :(得分:0)

我有类似的问题。

在我的情况下,解决方案是删除已弃用的docker版本。我认为这引起了一些冲突。

关于ubuntu:

sudo apt remove docker

解决了我的问题

答案 41 :(得分:0)

好的,所以我今天开始遇到这个问题。然后我看到了很多回复,但似乎没有一个对我有用。首先是大多数指向linux的指令。而对于Mac版本,他们都在谈论运行'docker-machine'。我假设您使用docker-machine如果您安装docker工具箱,因为docker将在Windows和Mac平台的虚拟机中运行。但它的2017年现在和mac的docker非常稳定,因此不需要使用工具箱。

不确定守护进程是如何停止的。但要重新启动它,我所要做的就是去“应用程序”并双击docker图标。有人要求我更新并重新启动我接受的内容。之后,一切都像魅力一样。