Docker 错误: 客户端和服务器没有相同的版本

因为我刚把 Docker 更新到1.1.0,我得到:

来自守护进程的错误响应: 客户端和服务器没有相同的版本(客户端: 1.13,服务器: 1.12)

你知道怎么修吗?

我切换回1.0.1,一切又恢复正常了。

34868 次浏览

看起来在安装 boot2docker 之后你需要升级虚拟机:

如果你正在从 boot2docker 0.12或更高版本升级,你可以使用 boot2docker stop & & boot2docker download & & boot2docker up 来更新你现有的虚拟机(在使用安装程序升级之后) ,而且你不会丢失你现有的数据。

(https://github.com/boot2docker/osx-installer/releases/tag/v1.1.0)

如果您更新了 Docker,但服务尚未重新启动,则可能会发生这种情况。然后,您将尝试使用更新的客户端连接到 Docker 守护进程,而该守护进程(在更新之前已经在运行)仍然在运行旧版本。

要解决这个问题,请重新启动服务:

SysV init:

service docker restart

系统:

systemctl daemon-reload

systemctl restart docker

我有最新版本的 boot2docker,docker 和虚拟机,但仍然收到这个消息。看来运行 brew upgrade boot2docker不是个好主意。在运行 boot2docker upgrade时,我被要求设置一些环境变量,然后它就对我起作用了。

Boot2docker 要求我设置以下内容(参见最后几行) :

$ boot2docker upgrade
Latest release for boot2docker/boot2docker is v1.3.0
Downloading boot2docker ISO image...
Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.3.0/boot2docker.iso
to /Users/.../.boot2docker/boot2docker.iso
Waiting for VM and Docker daemon to start...
.........oooooooooooooo
Started.
Writing /Users/.../.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/.../.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/.../.boot2docker/certs/boot2docker-vm/key.pem


To connect the Docker client to the Docker daemon, please set:
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/.../.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

你可以一次剪切并粘贴这三行信息到你的终端。

检查它们是否正确:

$ env

我发现酿酒的版本和 docker.io 网站上的版本相比已经过时了。因此,我认为最好的办法是去网站和下载安装文件。

对我来说唯一有效的方法就是终止这个过程,并从“ sudo service docker start”开始。

对我来说,唯一奏效的就是从 VirtualBox 中删除 boot2docker 映像,然后完全删除 ~/.boot2docker文件夹,最后再次运行 boot2docker init

如果您使用 docker-machine来管理本地基于 VirtualBox 的计算机,解决方案与 boot2docker 一样简单:

docker-machine upgrade MACHINE_NAME

它要求 docker-machine下载最新的 boot2docker.iso,并将其作为一个新的根文件系统放在升级后的 VM 中。

顺便说一下,VirtualBox 支持的 docker 机器有其只读的根文件系统。这意味着在机器重新启动后,任何手动更新都不可能存在。这对我来说是个惊喜。

Boot2docker 删除

Boot2docker init

对我有用,当然在那之前和之后都要停止/启动恶魔。

这对我很有效: 它只是关闭 vm,删除并重新创建它,然后重新启动它。它重新运行 shellinit,这样当它恢复时,您的 ENV 变量就会被设置为正确的 IP 地址。

$ boot2docker poweroff && \
boot2docker delete && \
boot2docker init && \
boot2docker up
$ eval `boot2docker shellinit`

我使用了 boot2docker 的最新版本(v1.7.1) ,并得到了客户机服务器不匹配错误。然后我运行 boot2docker upgrade,它解决了这个问题。

明确的答案:

如果您是通过 明白了而不是 boot2docker 来到这里的,那么以下是解决方案: 使用 docker_api_version: auto参数

- name: Mongo data container
docker:
docker_api_version: auto
name: mongo-primary-dc
image: debian:wheezy
state: present
volumes:
- /data

我猜想这是因为安赛尔使用的 docker-py 模块通常与 Ubuntu apt-get 存储库的版本不同。

这里的正确答案是非常古老的 (Docker 已经将 boot2docker 重命名为 Docker Machine,并添加了一些其他功能)

无论如何,我面临着同样的问题,我花了大约3天的时间来解决:

这就是解决办法

1)找到 boot2docker.iso的位置

sudo find ~/ -name 'boot2docker.iso'

2)备份 boot2docker.iso文件后删除该文件

/Users/{user}/.docker/machine/cache/boot2docker.iso

3)删除你的 Docker vm

docker-machine rm {default}

这个应该也可以删除这个:

/Users/{user}/.docker/machine/machines/default/boot2docker.iso

4)创建新的 docker vm

docker-machine create --driver virtualbox default

这将首先下载一个新的 boot2docker.iso,然后使用它来创建您的 vm。

现在这个应该可以解决这个问题:)

但是

如果在这里出现任何错误,比如:

Running pre-create checks...
(mega-docker) No default Boot2Docker ISO found locally, downloading the latest release...
Error with pre-create check: "Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: dial tcp: lookup api.github.com on 192.168.0.1:53: read udp 192.168.0.103:53947->192.168.0.1:53: i/o timeout"

尝试手动下载 boot2docker.iso文件,方法是转到 https://api.github.com/repos/boot2docker/boot2docker/releases/latest,然后单击 html_url,最后选择下载该文件。

一旦你得到的文件去,并把它手动在 /Users/{user}/.docker/machine/cache/

最后重新运行这个命令 docker-machine create --driver virtualbox default

我试图查询一个 Docker 服务器上最近的一个客户:

  • 服务器 API 版本: 1.21
  • 客户端 API 版本1.22

对我来说,解决办法就是:

export DOCKER_API_VERSION=1.21

参考文献: Https://docs.docker.com/engine/reference/commandline/cli/

我的解决方案是在 VirtualBox 中的 docker VM 上执行一个 Close > Power Off 操作,然后重新启动 Kitatic。这东西帮我修好了。