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


84

由于我刚刚将Docker更新到1.1.0,所以我得到了:

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

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

我切换回1.0.1,一切再次正常。


我也有同样的问题,使用boot2docker。那也是你的情况吗?
sigmus 2014年

2
是的,我也在使用boot2docker。在卸载docker并重新安装(而不是“重新安装”)后,它又可以正常工作了。brew卸载
docker

4
也许您应该编辑标题/问题,以明确这是一个boot2docker问题(以备将来参考)。
sigmus 2014年

无耻的插件:我和一个朋友组装了一个名为Docker Version Manager的工具,以在短期内提供帮助。
凯尔·凯利2015年

Answers:


127

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

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

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


3
还brew brew
docker

5
您不再需要使用docker命令行工具的brew版本。Boot2Docker提供了正确的版本。
AbelMuiño2014年

拥有An error occurred trying to connect: Get https://192.168.59.103:2376/v1.19/containers/json?all=1: x509: certificate is valid for 127.0.0.1, 10.0.2.15, not 192.168.59.103:/
Ain Tohvri

1
我也遇到了这个证书问题。我跑了boot2docker delete,然后boot2docker init它开始工作。
Dean Wampler,2015年

1
我和一个朋友组装了一个名为Docker Version Manager的工具,以在短期内提供帮助。
凯尔·凯利2015年

19

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

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

sysV初始化:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker


1
对于systemd建议做systemctl daemon-reload之前systemctl restart docker
baldrs

似乎最简单的答案是最好的答案:)
达里斯(Daris)2015年

13

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

docker-machine upgrade MACHINE_NAME

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

顺便说一句,由VirtualBox支持的docker计算机的根文件系统为只读。这意味着在计算机重新启动后,任何手动更新都是不可能的。这让我感到惊讶。


12

我拥有最新版本的boot2docker,docker和virtual box,但仍收到此消息。似乎跑步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

11

我正在尝试使用更新的客户端查询Docker服务器:

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

对我来说,解决方案是:

export DOCKER_API_VERSION=1.21

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


1
谢谢!这解决了我的问题
MajiK '17

1
考虑到(在各种情况下)各种各样的长度升级docker的答案数量(可以理解),对docker协议进行版本控制和向后兼容的事实一定不能得到很好的记录或足够清晰可见……
Marcello Romani

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虚拟机

docker-machine rm {default}

这也应该删除那个:

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

4)创建新的docker vm

docker-machine create --driver virtualbox default

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

现在这应该解决它:)

如果您在这里遇到任何错误,例如:

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


2

对我唯一有效的方法是终止该进程,并使用“ sudo service docker start”启动它。


2

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


1

boot2docker删除

boot2docker初始化

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


1

这对我有用:它只是关闭vm,删除并重新创建它,然后重新启动它。它会重新运行shellinit,以便在备份时将ENV变量设置为正确的IP地址。

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

0

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


0

我的解决方案是在VirtualBox中的Docker VM上执行“关闭”>“关闭电源”,然后重新启动Kitematic。这为我解决了。


0

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


0

答案:

如果您是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存储库版本不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.