Docker无法连接到docker守护进程
在将我的Docker版本更新到0.8.0
,inputsudo 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
我如何解决这个问题?
Linux的
创build一个Docker组文档揭示了以下步骤:
- 将用户添加到泊坞窗组。
sudo usermod -aG docker $(whoami)
- 注销并重新login以确保docker以正确的权限运行。
- 开始docker工人。
sudo服务docker启动
Mac OS X
正如Dayel Ostraco所说,有必要添加环境variables:
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)"
如果您不希望在每个terminal会话中都运行此eval语句,则可以将其添加到您的bash_profile
:
#Docker eval "$(docker-machine env default)"
请确保重新启动terminal会话或在bash_profile
上运行源以使更改生效。
经过详细调查, Mac OS X重新启动后 (或者Docker虚拟机重新启动) 每次都会发生这个问题,阻止Docker客户端连接到Docker守护进程。
要解决这个问题,你可以:
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 :
再次重新运行这三个命令,这应该是第二次。
Linux的
要在Linux上(从CLI )运行docker守护进程,请尝试运行:
$ sudo service docker start
或例子来初始化“基础”文件系统:
$ sudo service docker stop $ sudo rm -rf /var/lib/docker $ sudo service docker start
或手动,例如:
$ sudo docker -d --storage-opt dm.basesize=20G
要在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'
OS X
在OS X上, docker
二进制文件只是一个客户端,你不能用它来运行docker守护进程,因为Docker守护进程使用特定于Linux的内核特性,所以你不能在OS X中本地运行Docker。所以你必须安装docker-machine
为了创build虚拟机并附加到它。
通过以下方式检查您的docker-machine
:
$ docker-machine --version docker-machine version 0.5.1 (HEAD)
如果不是, 请通过以下方式安装机器
-
OS X
- 通过Brew安装:
brew install docker-machine
-
手动:
install -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine
- 通过Brew安装:
请参阅: Docker – Mac OS X安装
那么你需要创builddefault
机器(如果你没有):
docker-machine create --driver virtualbox default
或者检查是否已经存在:
docker-machine ls
设置Docker客户端的环境:
eval "$(docker-machine env default)"
然后通过列出容器仔细检查:
docker ps
请参阅: 开始使用Docker机器和本地VM
这通常发生在你不在docker
组的时候。 您可以将自己添加到docker
组中:
sudo usermod -aG docker yourusername
要么
sudo usermod -aG docker $(whoami)
之后,您需要注销并重新login到服务器。
或者,你可以sudo
每个Docker命令。
如果以上所有其他解决scheme都不起作用,则可以尝试检查/var/run/docker.sock
的所有权:
ls -l /var/run/docker.sock
如果您不是所有者,请使用以下命令更改所有权:
sudo chown *your-username* /var/run/docker.sock
然后,您可以继续尝试执行无忧的Docker命令:D
找出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守护进程logging到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,事后工作。
当然,不要盲目地认为这会起作用,我build议再次手动运行守护进程,并在启动服务备份之前查看其他错误的日志输出。
如果您收到消息Can't connect to docker daemon. Is 'docker -d' running on this host?
Can't connect to docker daemon. Is 'docker -d' running on this host?
,你可以通过docker version
来检查它。
如果您看到像Docker Client正在运行的信息。 但是Docker Server不是 ,显然你需要启动Docker服务器。
在CentOS中,您可以使用service
来启动或停止Docker服务器。
$ sudo service docker stop $ sudo service docker start
然后,在inputdocker version
,您将获得Docker Client和Docker Server的信息 ,并且Docker守护程序已启动。
安装后重启Docker:
$ sudo service docker stop $ sudo service docker start
它工作。
做一个ps aux | grep docker
ps aux | grep docker
来查看守护进程是否正在运行。 如果没有运行/etc/init.d/docker start
我有同样的错误,并试图docker-machine regenerate-certs
或eval..
没有为我工作。
这在OS X 10.11.3(El Capitan)和Docker v1.10.1上。 我只能通过删除和重新创builddocker-machine才能解决这个问题。 资源
如果运行docker-machine ls
,它会向您显示与下面类似的输出;
docker
未知
错误
无法查询docker版本:无法连接到docker引擎端点
尝试删除您的Docker机器;
docker-machine rm -f default
其中default
是您的Docker计算机名称。 然后;
docker-machine create -d virtualbox default
创build一个新的Docker机器。
仔细检查一切看起来正常现在(没有错误或未知的docker)与:
docker-machine ls
最后,不要忘了在继续运行Docker Quickstart Terminal之前,先运行"$(docker-machine env default)"
。
我遇到了这个问题,我使用这些命令重新启动了Docker:
$ sudo service docker stop $ sudo service docker start
但是我没有解决我的问题,因为我忘了执行没有sudo
Docker命令。 对于那些面临这个问题的人,试着去检查一下。
尝试
$ sudo docker info
而不是这个:
$ docker info
尝试添加当前用户到docker
组:
sudo usermod -aG docker $USER
然后注销并login。
我遇到了同样的问题 – “无法连接到docker守护进程”。 (除了在尝试启动服务器时,我没有收到任何'文件未find'错误。)
'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的人可能已经注册了守护进程,这对我来说已经开始了。 因此,试图杀死守护进程以手动重启失败(操作不允许)。 所以我做了一个
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
我有类似的问题。 我必须注销并重新login到shell,因为我刚刚安装了Docker,并且以下命令未显示在我的环境中。
export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc
如果您使用Docker工具在OS X上运行,请按照此操作。
重新启动守护程序并configuration您的环境:
docker-machine restart
接着
docker-machine env
最后,
eval $(docker-machine env)
testing守护进程正在运行:
docker ps -a
或docker-machine ls
。 这将列出所有容器。
我刚刚在亚马逊AWS上遇到了同样的问题。
这是我所尝试的:
- 使用已有的AWS实例在本地设置
docker-machine
- 使用通用设置
- 它的连接types,但由于远程端口被closures,它失败了
- 之后,Docker守护进程拒绝启动,但运行
dockerd
确实工作…
它在远程机器上进行了以下testing:
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)
在Docker的DOC站点之后: 作为非root用户pipe理Docker
1)创buildDocker组
sudo groupadd docker
2)使用户属于docker组来获得组的权限。
sudo usermod -aG docker $USER
检查是否为您的shell设置了DOCKER_HOST环境variables。
env | grep DOCKER_HOST
如果存在,
unset DOCKER_HOST
那么这应该工作:
docker run hello-world
我遇到了同样的问题。 在CentOS 6.5中:
ps aux |grep `cat /var/run/docker.pid`
如果显示没有Docker守护进程存在,那么我input:
docker -d
然后按Ctrl + D停止Docker。 因为我们使用-d
选项,所以Docker将作为守护进程运行。 现在我们可以做到:
service docker start
然后,我可以做一个docker pull centos
。 就这样。
注:如果这些不起作用,你可以尝试yum update
,然后再重复这些,因为我在这之前yum install
。
检查你是否使用Docker机器:)
运行docker-machine env default
应该做的伎俩。
因为根据文件:
Docker Machine是一个工具,可以让你在虚拟主机上安装Docker Engine,并用
docker-machine
命令pipe理主机。 您可以使用机器在您的本地Mac或Windows机箱,公司networking,数据中心或云提供商(如AWS或Digital Ocean)上创buildDocker主机。使用
docker-machine
命令,您可以启动,检查,停止并重新启动托pipe主机,升级Docker客户端和守护进程,并configurationDocker客户端与您的主机通信。将机器CLI指向正在运行的托pipe主机,并且可以直接在该主机上运行
docker
命令。 例如,运行docker-machine env default
指向一个名为default
的主机,按照屏幕上的说明完成env
设置,并运行docker ps
,docker run hello-world
等等。
- 我也有同样的问题。 问题在于分配给docker-daemon和docker-client的套接字。
- 首先,没有为docker.sock上的docker-client设置权限您可以使用“sudo usermod -aG docker $ USER”
- 然后检查你的bash文件docker-client在哪里运行,对我来说是0.0.0.0:2375,而docker-daemon是在unix socket上运行的(在dockerd的configuration文件中设置的)。
- 只是评论bash线,它会正常工作。
- 但是如果你想让它在TCP端口而不是unix套接字上工作,可以修改dockerd的configuration文件,并将其设置为0.0.0.0.2375,并保持bash的状态(如果存在)或设置为0.0.0.0: 2375。
要修复,您需要在terminal中发出以下命令。 我会解释每一步:
# 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
脚本 :
# 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
重启是可选的,但我build议你确保所有的顺利运行。
我在Ubuntu 14.04上运行Docker 1.10的时候遇到了同样的问题,而且没有一个给定的答案。 对我来说,修正是在运行Docker守护进程时指定存储驱动程序。
sudo docker daemon --storage-driver=devicemapper
如果重新生成TLS证书不起作用
docker-machine regenerate-certs default
尝试重新启动docker机器并设置envvariables:
docker-machine restart default eval $(docker-machine env default)
检查机器是否在运行:
docker-machine ls
或者可选地
docker run hello-world
这对我有效。 但是,如果您还没有守护进程, Docker的故障排除页面会详细介绍停止,删除和创build新机器的过程。
我也遇到了这个问题:“无法连接到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
好,所以我今天开始有这个问题。 然后我看到很多回应,但似乎没有为我工作。 首先大部分的指令是指向linux的。 而对于Mac版本,他们都在谈论运行“docker机”。 我假设你使用docker机,如果你安装docker工具箱,因为然后docker将运行在Windows和Mac平台的虚拟机。 但是现在的2017和docker for mac是非常稳定的,因此不需要使用工具箱。
不知道守护进程如何停止。 但要重新启动它,我只需要“应用程序”,然后双击泊坞窗图标。 我被要求更新和重新启动,我接受。 之后,一切都像魅力一样。
尝试在/etc/sysconfig
更改Dockerconfiguration文件, docker
或docker-network
:
(…〜v1.17)
docker
文件:
OPTIONS= -H fd://
或(v1.18):
docker-network
文件:
DOCKER_NETWORK_OPTIONS= -H unix:///var/run/docker.sock
你有尝试关掉它吗? 🙂
在我的Mac上升级到Docker 1.10.1后,我遇到了同样的问题。 我做了以下几点:
在Docker快速入门terminal上
$ exit
$ exit
然后
docker机杀死默认
然后重新启动Docker快速入门terminal
这解决了我的问题。
Docker服务可能没有运行。
如果你在RedHat / Fedora / CentOS上,请试试这个:
sudo systemctl start docker
如果你在Ubuntu / Debian上:
sudo service start docker
Docker将开始在主机和相应的端口上运行。
我有一个类似的问题。
在我的情况下,解决scheme是删除不推荐使用的docker版本。 我认为这是造成一些冲突。
在Ubuntu上:
sudo apt remove docker
为我解决了这个问题