Docker错误:客户端和服务器没有相同的版本
因为我只是更新了Docker到1.1.0我得到:
来自守护进程的错误响应:客户机和服务器没有相同的版本(客户机:1.13,服务器:1.12)
你知道如何解决这个问题吗?
我切换回到1.0.1,一切工作。
看起来你需要在安装boot2docker后升级虚拟机:
如果从boot2docker 0.12或更高版本进行升级,则可以使用boot2docker stop && boot2docker下载&& boot2docker来更新现有虚拟机(使用安装程序进行升级后) – 而且不会丢失现有数据。
( https://github.com/boot2docker/osx-installer/releases/tag/v1.1.0 )
如果您更新了Docker,则可能发生这种情况,但该服务尚未重新启动。 然后,您将尝试使用更新的客户端连接到Docker守护进程,而守护进程(在更新之前已经运行)仍在运行旧版本。
要解决此问题,请重新启动服务:
sysV init:
service docker restart
systemd:
systemctl daemon-reload
systemctl restart docker
如果您使用docker-machine
来pipe理本地基于VirtualBox的机器,则解决scheme与boot2docker一样简单:
docker-machine upgrade MACHINE_NAME
它要求docker-machine
下载最新的boot2docker.iso
,并将其作为新的根文件系统放入升级的VM中。
顺便说一下,VirtualBox支持的docker机器只有root文件系统。 这意味着任何手动更新都不可能在机器重启后继续存在。 这对我来说是一个惊喜。
我有最新版本的boot2docker,docker和虚拟箱,但仍然收到此消息。 看来运行brew upgrade boot2docker
不是最好的主意。 当运行boot2docker upgrade
,我被要求设置一堆环境variables,然后它为我工作。
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
可以一次把这三行剪切粘贴到terminal中。
要检查他们是正确的:
$ env
我试图用更近的客户端查询一个Docker服务器:
- 服务器API版本:1.21
- 客户端API版本1.22
对我来说,解决scheme只是:
export DOCKER_API_VERSION=1.21
参考: https : //docs.docker.com/engine/reference/commandline/cli/
唯一对我有用的是杀死这个进程,并开始“sudo服务docker启动”。
我唯一的工作是从VirtualBox中删除boot2docker映像,然后完全删除~/.boot2docker
文件夹,最后再次运行boot2docker init
。
这里的正确答案是非常老的(Docker已经将boot2docker重命名为Docker Machine,并增加了一些function) 。
无论如何,我面临同样的问题,并带我约3天来解决:(
这是解决scheme
1)findboot2docker.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)创build新的docker vm
docker-machine create --driver virtualbox default
这将首先下载一个新的boot2docker.iso
,然后用它来创build你的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"
尝试通过https://api.github.com/repos/boot2docker/boot2docker/releases/latest手动下载;boot2docker.iso
文件,然后点击html_url
,最后select下载文件。
一旦你得到的文件去手动放置在/Users/{user}/.docker/machine/cache/
最后重新运行这个命令docker-machine create --driver virtualbox default
boot2docker删除
boot2docker初始化
为我工作。 当然,之前和之后停止/启动deamon。
这工作对我来说:它只是closures虚拟机,删除和重新创build它,并再次启动它。 它重新运行shellinit,以便您的ENVvariables在返回时使用正确的IP地址进行设置。
$ boot2docker poweroff && \ boot2docker delete && \ boot2docker init && \ boot2docker up $ eval `boot2docker shellinit`
我有最新版本的boot2docker(v1.7.1),并得到客户端服务器不匹配的错误。 然后我只是运行boot2docker upgrade
,它解决了这个问题。
我的解决scheme是在VirtualBox中的docker虚拟机上执行Close> Power Off,然后重新启动Kitematic。 这为我修好了。
我发现brew中的版本与docker.io网站上的版本相比已经过时了。 所以我觉得最好的办法是去网站下载安装文件。
Ansible答案:
如果你是通过Ansible而不是boot2docker访问的,这里是解决scheme:使用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版本库不同。