当我把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
我怎么解决这个问题?
要修复此问题,您需要在终端中发出以下命令。我将解释每一步:
# 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
重新启动是可选的,但我建议您这样做,以确保一切正常运行。
找出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,之后一切都正常了。
当然,我并不是盲目地假设这样可以工作,而是建议再次手动运行守护进程,并在启动服务备份之前检查日志输出是否有其他错误。
我有同样的错误,并尝试docker-machine regenerate-certs或eval..对我没用。
这适用于OS X 10.11.3 (El Capitan)和Docker v1.10.1。我只能通过删除和重新创建docker-machine来修复它。源
如果运行docker-machine ls,它会显示与下面类似的输出;
码头工人
未知的
错误
Unable to query docker version: Cannot
连接到docker引擎端点
试着移除Docker机器;
docker-machine rm -f default
其中默认是Docker机器名。然后;
docker-machine create -d virtualbox default
创建一个新的Docker机器。
再次检查现在一切看起来正常(没有错误或未知Docker):
docker-machine ls
最后,在你继续或运行Docker快速入门终端之前,不要忘记运行“$(Docker -machine env default)”。
如果你在OS X上运行Docker,运行下面的eval对我来说是有效的。
eval "$(docker-machine env default)"
如果你不想在每个终端会话上都运行这个eval语句,你可以在bash_profile中添加:
#Docker
eval "$(docker-machine env default)"
确保重新启动终端会话或在bash_profile上运行source以使更改生效。