由于我刚刚将 Docker 更新到 1.1.0,我得到:
来自守护进程的错误响应:客户端和服务器的版本不同(客户端:1.13,服务器:1.12)
你知道如何解决这个问题吗?
我切换回 1.0.1,一切都恢复正常了。
由于我刚刚将 Docker 更新到 1.1.0,我得到:
来自守护进程的错误响应:客户端和服务器的版本不同(客户端:1.13,服务器:1.12)
你知道如何解决这个问题吗?
我切换回 1.0.1,一切都恢复正常了。
看起来你需要在安装 boot2docker 后升级虚拟机:
如果您从 boot2docker 0.12 或更高版本升级,您可以使用 boot2docker stop && boot2docker download && boot2docker up 更新您现有的虚拟机(在使用安装程序升级后) - 您不会丢失现有数据。
(https://github.com/boot2docker/osx-installer/releases/tag/v1.1.0)
如果您已更新 Docker,但尚未重新启动服务,则可能会发生这种情况。然后,您将尝试使用更新的客户端连接到 Docker 守护程序,而守护程序(在更新之前已经运行)仍在运行旧版本。
要解决此问题,请重新启动服务:
sysV 初始化:
service docker restart
系统化:
systemctl daemon-reload
systemctl restart docker
如果您用于docker-machine
管理本地基于 VirtualBox 的机器,则解决方案与 boot2docker 一样简单:
docker-machine upgrade MACHINE_NAME
它要求docker-machine
下载最新版本boot2docker.iso
并将其作为新的根文件系统放置在升级后的 VM 中。
顺便说一下,支持 VirtualBox 的 docker 机器的根文件系统是只读的。这意味着任何手动更新都不可能在机器重新启动后继续存在。这对我来说是一个惊喜。
我有最新版本的 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
我试图用更新的客户端查询 Docker 服务器:
我的解决方案是:
export DOCKER_API_VERSION=1.21
参考: https ://docs.docker.com/engine/reference/commandline/cli/
这里的正确答案非常古老(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
,然后使用它来创建您的虚拟机。
现在这应该解决它:)
如果您在这里遇到任何错误,例如:
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
唯一对我有用的是终止进程并使用“sudo service docker start”启动它。
唯一对我有用的是从 VirtualBox 中删除 boot2docker 映像,然后完全删除~/.boot2docker
文件夹,最后boot2docker init
再次运行。
boot2docker 删除
boot2docker 初始化
为我工作。当然,在此之前和之后停止/启动守护进程。
这对我有用:它只是关闭虚拟机,删除并重新创建它并再次启动它。它重新运行 shellinit,以便在它恢复时使用正确的 IP 地址设置您的 ENV 变量。
$ boot2docker poweroff && \
boot2docker delete && \
boot2docker init && \
boot2docker up
$ eval `boot2docker shellinit`
我发现 brew 中的版本与 docker.io 网站上的版本相比已经过时了。因此,我认为最好的方法是访问网站并下载安装文件。
我有最新版本的 boot2docker(v1.7.1) 并得到客户端服务器不匹配错误。然后我就跑了boot2docker upgrade
,它解决了问题。
如果您是通过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 存储库的版本不同。
我的解决方案是在 VirtualBox 中的 docker VM 上执行 Close > Power Off,然后重新启动 Kitematic。这为我修好了。