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

时间:2014-07-05 12:45:38

标签: docker boot2docker docker-machine

由于我刚刚将Docker更新为1.1.0,我得到:

  

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

你知道如何解决这个问题吗?

我切换回1.0.1,一切都恢复了。

13 个答案:

答案 0 :(得分:127)

看起来您需要在安装boot2docker后升级VM:

  

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

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

答案 1 :(得分:18)

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

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

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker

答案 2 :(得分:12)

我有最新版本的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

答案 3 :(得分:10)

我试图用更新的客户端查询Docker服务器:

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

我的解决方案就是:

export DOCKER_API_VERSION=1.21

参考: https://docs.docker.com/engine/reference/commandline/cli/

答案 4 :(得分:3)

这里的正确答案是非常老的(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,然后使用它来创建你的虚拟机。

现在应该解决它:)

BUT

  

如果您在此处收到任何错误,请执行以下操作:

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

答案 5 :(得分:2)

对我来说唯一有用的就是杀死进程并以“sudo service docker start”启动它。

答案 6 :(得分:2)

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

答案 7 :(得分:1)

boot2docker delete

boot2docker init

为我工作。当然,在此之前和之后停止/启动守护。

答案 8 :(得分:1)

这对我有用:它只关闭vm,删除&重新创建它并重新启动它。它会重新运行shellinit,以便在ENV变量恢复时使用正确的IP地址进行设置。

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

答案 9 :(得分:0)

我发现brew中的版本与docker.io网站上的版本相比已过时。因此,我认为最好的方法是访问网站并下载安装文件。

答案 10 :(得分:0)

我有最新版本的boot2docker(v1.7.1)并且客户端服务器不匹配错误。然后我就跑了boot2docker upgrade并解决了问题。

答案 11 :(得分:0)

Ansible答案:

如果你是通过 Ansible 而不是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

我想原因是Ansible使用的docker-py模块通常与Ubuntu apt-get存储库的版本不同。

答案 12 :(得分:0)

我的解决方案是关闭>在VirtualBox中的docker VM上关闭电源,然后重新启动Kitematic。这为我修好了。