Docker不能连接到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

我怎么解决这个问题?

912709 次浏览

执行ps aux | grep docker命令查看守护进程是否正在运行。如果不是,运行/etc/init.d/docker start

我也遇到了同样的问题——“无法连接到docker守护进程。”(除了我在试图启动服务器时没有得到任何“文件未找到”错误。)

“ps”表示“/usr/bin/docker -d”仍在运行

我意识到我自己从来没有成功地运行过服务器。每一次尝试都产生了结果

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

所以我后来才意识到,安装docker可能已经注册了upstart守护进程,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

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

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

找出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

这是因为实例是从另一个虚拟机克隆的。我只需要删除pidfile,之后一切都正常了。

当然,我并不是盲目地假设这样可以工作,而是建议再次手动运行守护进程,并在启动服务备份之前检查日志输出是否有其他错误。

我也有同样的问题。在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在这些之前。

尝试更改Docker配置文件,dockerdocker-network/etc/sysconfig:

(…~ v1.17)

# EYZ0文件:

OPTIONS= -H fd://

或(v1.18):

# EYZ0文件:

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

Linux

Linux的安装后步骤文档揭示了以下步骤:

     .< li>创建码头工人组
    Sudo groupadd docker
  1. 添加用户到码头工人组 sudo usermod -aG docker $(whoami)
  2. 退出并重新登录以确保docker以正确的权限运行。
  3. <李>码头工人开始。< >之前 Sudo service docker start . txt

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命令输出指导流程的注释。

如果你在OS X上运行Docker,运行下面的eval对我来说是有效的。

eval "$(docker-machine env default)"

如果你不想在每个终端会话上都运行这个eval语句,你可以把它添加到你的bash_profile:

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

确保重新启动终端会话或在bash_profile上运行source,以便更改生效。

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

# 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运行我的# EYZ0脚本:

# 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

重新启动是可选的,但我建议您这样做,以确保一切正常运行。

经过详细的调查,这个问题似乎发生在每次在Mac OS X重新启动后(或者Docker虚拟机被重新启动),这阻止了Docker客户端连接到Docker守护进程。

要解决这个问题,你可以:

A)使用官方安装程序(https://www.docker.com/products/docker-toolbox)重新安装Docker工具箱,或者简单地

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  :

只要再次重新运行这三个命令,第二次就可以工作了。

Linux

要在Linux上运行docker守护进程(从CLI开始),运行:

$ sudo service docker start # Ubuntu/Debian

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

RedHat/CentOS操作系统:执行:sudo systemctl start docker

要初始化“base”文件系统,运行:

$ 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上安装机器二进制文件:

  • < p >本地:

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

    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

On macOS the docker binary is only a client and you cannot use it to run the docker daemon, because Docker daemon uses Linux-specific kernel features, therefore you can’t run Docker natively in OS X. So you have to install docker-machine in order to create VM and attach to it.

Install docker-machine on macOS

If you don't have docker-machine command yet, install it by using one of the following methods:

  • Using Brew command: brew install docker-machine docker.
  • manually from GitHub:

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

See: Get started with Docker for Mac.

Configure docker-machine on macOS

To start Docker Machine via Homebrew, run:

brew services start docker-machine

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

docker-machine create --driver virtualbox default

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

eval "$(docker-machine env default)"

然后通过列出容器进行再次检查:

docker ps

看到:# EYZ0。


在macOS上安装Docker.app

除了上述解决方案,你还可以通过以下方式安装Docker应用:

brew cask install docker

检查张贴更多详情。参见:无法连接到macOS上的Docker守护进程

我有同样的错误,尝试docker-machine regenerate-certseval..没有为我工作。

这适用于OS X 10.11.3 (El Capitan)和Docker v1.10.1。我只能通过删除和重新创建docker-machine来修复它。# EYZ0

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

码头工人

未知的

错误

Unable to query docker version: Cannot 连接到docker引擎端点

试着移除Docker机器;

docker-machine rm -f default

default是Docker机器名。然后;

docker-machine create -d virtualbox default

创建一个新的Docker机器。

再次检查现在一切看起来正常(没有错误或未知Docker):

docker-machine ls

最后,不要忘记在你继续或运行Docker快速入门终端之前运行"$(docker-machine env default)"

你试过关机再开机吗?: -)

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

在Docker快速入门终端上

美元的出口

美元的出口

然后

Docker-machine kill default

然后重启Docker快速启动终端

这解决了我的问题。

检查你是否正在使用Docker Machine:)

运行docker-machine env default就可以了。

因为根据文档:

Docker Machine是一个让你安装Docker引擎的工具 虚拟主机,使用docker-machine命令管理主机。你 可以使用Machine在本地Mac或Windows上创建Docker主机吗 盒子,在您的公司网络上,在您的数据中心,或在云上

使用docker-machine命令,您可以启动,检查,停止和 重启托管主机,升级Docker客户端和守护进程,以及

.配置Docker客户端与您的主机通话

将Machine CLI指向正在运行的托管主机,然后可以运行 直接在该主机上执行docker命令。例如,运行 docker-machine env default指向一个名为default的主机,在屏幕上跟随 指令完成env设置,然后运行docker psdocker run hello-world,依此类推

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

如果重新生成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的故障排除页面详细说明了停止、删除和创建新机器的过程。

我在Ubuntu 14.04上运行Docker 1.10时遇到了同样的问题,所有给出的答案都不能正常工作。对我来说,解决办法是在运行Docker守护进程时指定存储驱动程序。

sudo docker daemon --storage-driver=devicemapper

我在安装后重新启动Docker:

$ sudo service docker stop
$ sudo service docker start

这很有效。

如果你在OS X上使用Docker工具,请遵循以下步骤。

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

docker-machine restart

然后

docker-machine env

最后,

eval $(docker-machine env)

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

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

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

$ sudo service docker stop
$ sudo service docker start

但是我没有解决我的问题,因为我忘记在没有sudo的情况下执行Docker命令。对于那些面临这个问题的人,试着检查一下。

试一试

$ sudo docker info

而不是这样:

$ docker info

如果您得到消息Can't connect to docker daemon. Is 'docker -d' running on this host?,您可以通过docker version检查它。

如果你看到类似Docker客户端正在运行。但Docker服务器不是这样的信息,很明显你需要启动Docker服务器。

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

$ sudo service docker stop
$ sudo service docker start

然后,在键入docker version之后,您将获得Docker客户端和Docker服务器的信息,并且Docker守护进程已经启动。

这通常发生在您不在docker组时。您可以通过以下方式将自己加入docker组:

sudo usermod -aG docker yourusername

sudo usermod -aG docker $(whoami)

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

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

  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。

我还遇到了“无法连接到Docker守护进程”的问题。这台主机上是否运行docker守护进程?”

我忘了使用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

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

sudo usermod -aG docker $USER

然后注销并重新登录。

如果上面所有的解决方案都不工作,你可以试着检查/var/run/docker.sock的所有权:

ls -l /var/run/docker.sock

如果你不是所有者,那么使用以下命令改变所有者:

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

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

我也遇到了同样的问题,在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)

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

不知道守护进程是如何停止的。但要重新启动它,我所要做的就是点击“应用程序”,双击docker图标。我被要求更新和重新发布,我接受了。从那以后,一切都很顺利。

Docker的DOC站点:以非root用户管理Docker

1)创建Docker组

sudo groupadd docker

2)使用户属于docker组,以获得docker组的权限。

sudo usermod -aG docker $USER

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

env | grep DOCKER_HOST

如果它存在,

unset DOCKER_HOST

然后这应该工作:

docker run hello-world

我也遇到过类似的问题。

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

在ubuntu上:

sudo apt remove docker

帮我解决了问题

码头工人服务可能没有运行。

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

# EYZ0

如果你使用的是Ubuntu/Debian:

# EYZ0

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

运行守护进程的命令如下:

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

脚本让守护进程在后台运行,在Docker准备就绪后,您可以测试它是否接受命令。

sudo docker info

查看更多信息: # EYZ0 < / p >

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

sudo docker network create persistence_backend

如果你同时运行docker和docker-compose,这样做吗

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

为我工作。

使用# EYZ0

macOS

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

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

     brew uninstall docker-compose
    brew uninstall docker-machine
    brew uninstall docker
    
  2. 安装手动Homebrew-Cask应用程序:

     brew install --cask docker
    

注意:这个应用程序将创建必要的链接到dockerdocker-composedocker-machine等。

  1. 运行应用程序后,在状态菜单中签出Docker鲸鱼图标。
  2. 现在你应该能够像往常一样在终端中使用dockerdocker-composedocker-machine命令。

相关:

Linux / Windows

下载Docker CE从下载页面并按照说明操作。

如果你使用gitlab-ci / gitlab-runner,如果你没有权限访问/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

希望这能有所帮助。

您可以使用该命令

sudo service docker stop && sudo service docker start

sudo service docker restart

简单地重新启动它。

我知道这篇文章里已经有很多答案了。只是我想补充一个简单的答案,解决上述问题。

sudo systemctl start docker

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

当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。

已经有很多答案了,但希望这能帮助到一些人。这是通过snap安装docker时出现的问题。通过sudo运行将允许您连接到守护进程,但这将导致其他问题。解决方案是在安装snap包之前执行以下步骤:

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

在2020年4月的MacOS Catalina上,你只需要打开桌面应用程序:

docker app running

为了解决这个问题,我必须启用docker服务:

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

这种情况通常不会发生。但是有一天,消息出现了(如下所示),一个简单的重启修复了它

# EYZ0

执行如下命令:

docker context use default

我的问题是,docker的默认路径。Sock不在docker daemon所在的位置。

我的默认地址是/home/user/。Docker,但是Docker守护进程在/var/bin中。

我确实设置了env变量来设置正确的地址,这解决了问题

export DOCKER_CONFIG = '/var/bin'

https://docs.docker.com/engine/reference/commandline/cli/

我在ubuntu上安装了docker desktop,所以这可能是问题所在,或者为什么我的DOCKER_CONFIG设置不正确。