当我把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

我怎么解决这个问题?


当前回答

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

sudo systemctl start docker

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

其他回答

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

找出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,之后一切都正常了。

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

如果你使用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

希望这能有所帮助。

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

eval "$(docker-machine env default)"

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

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

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

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

sudo usermod -aG docker $USER

然后注销并重新登录。