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

我怎么解决这个问题?


当前回答

LINUX

你可以用这个答案https://stackoverflow.com/a/33596140/13997503 即使在使用这个之后,仍然会得到相同的错误。然后你可能已经安装了docker桌面,现在切换到docker引擎

可以使用此命令删除docker桌面服务文件

$ rm -rf ~/.docker

其他回答

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

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

本地: 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'

操作系统

在macOS上,docker二进制文件只是一个客户端,你不能用它来运行docker守护进程,因为docker守护进程使用linux特定的内核特性,因此你不能在OS x中本机运行docker。所以你必须安装docker-machine才能创建VM并附加到它。

在macOS上安装docker-machine

如果你还没有docker-machine命令,可以通过以下方式安装它:

使用Brew命令:Brew install docker-machine docker。 手动从GitHub: 安装-v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine

参见:开始使用Mac版Docker。

在macOS上配置docker-machine

通过Homebrew启动Docker Machine,运行:

brew services start docker-machine

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

docker-machine create --driver virtualbox default

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

eval "$(docker-machine env default)"

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

docker ps

请参见:从Docker Machine和本地VM开始。


安装码头工人。macOS应用程序

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

brew cask install docker

查看这篇文章了解更多细节。请参见:无法连接到macOS上的Docker守护进程

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

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

因为根据文档:

Docker Machine is a tool that lets you install Docker Engine on virtual hosts, and manage the hosts with docker-machine commands. You can use Machine to create Docker hosts on your local Mac or Windows box, on your company network, in your data center, or on cloud providers like AWS or Digital Ocean. Using docker-machine commands, you can start, inspect, stop, and restart a managed host, upgrade the Docker client and daemon, and configure a Docker client to talk to your host. Point the Machine CLI at a running, managed host, and you can run docker commands directly on that host. For example, run docker-machine env default to point to a host called default, follow on-screen instructions to complete env setup, and run docker ps, docker run hello-world, and so forth.

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

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

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