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

我怎么解决这个问题?


当前回答

已经有很多答案了,但希望这能帮助到一些人。这是通过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

其他回答

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

eval "$(docker-machine env default)"

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

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

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

Linux

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

创建docker组。 Sudo groupadd docker 将用户添加到docker组。 sudo usermod -aG docker $(whoami) 退出并重新登录以确保docker以正确的权限运行。 码头工人开始。 Sudo服务docker启动

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命令输出注释来指导这个过程。

经过详细的调查,这个问题似乎每次在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  :

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

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

sudo usermod -aG docker yourusername

or

sudo usermod -aG docker $(whoami)

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

或者,您可以sudo每个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,之后一切都正常了。

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