较新的Docker客户端与较旧的Docker主机

我们在RHEL 6.6上运行稍旧的Docker服务器。 目前我们的运营团队没有很好的支持,所以我们不能轻易升级。 现在它运行一个EPEL仓库中的Docker 1.3.2。 如果我在ssh里面做了一切所需要的概念certificate,希望能够帮助我推动pipe理层改进对Docker的基础架构支持。

我将其设置为侦听TCP / TLS,并且能够连接到它,但拒绝运行由本地Docker客户端提供的命令。

$ docker version Client version: 1.4.1 Client API version: 1.16 Go version (client): go1.4 Git commit (client): 5bc2ff8 OS/Arch (client): darwin/amd64 FATA[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15) 

我知道连接本身的作品,因为fig作品:

 $ cat > fig.yml test: image: busybox $ fig run --rm test sh / # hostname -f 084f75fb59d4 

有什么方法可以告诉新的docker客户端使用旧的dockerAPI版本,直到我可以访问新的docker主机?

从Docker 1.10.0开始,可以使用Docker引擎替代Docker客户端通信的API版本。

只需使用DOCKER_API_VERSION环境variables。

例:

 $ docker version Client: Version: 1.10.0 API version: 1.22 Go version: go1.5.3 Git commit: 590d510 Built: Fri Feb 5 08:21:41 UTC 2016 OS/Arch: darwin/amd64 Error response from daemon: client is newer than server (client API version: 1.22, server API version: 1.21) $ DOCKER_API_VERSION=1.21 docker version Client: Version: 1.10.0 API version: 1.21 Go version: go1.5.3 Git commit: 590d510 Built: Fri Feb 5 08:21:41 UTC 2016 OS/Arch: darwin/amd64 Server: Version: 1.9.1 API version: 1.21 Go version: go1.4.3 Git commit: a34a1d5 Built: Fri Nov 20 17:56:04 UTC 2015 OS/Arch: linux/amd64 

参考: https : //docs.docker.com/engine/reference/commandline/cli/#environment-variables

编辑

由于Docker 1.13,CLI具有改进的向后兼容性。 根据https://blog.docker.com/2017/01/whats-new-in-docker-1-13

从1.13开始,较新的CLI可以与较老的守护进程交谈。 我们还添加了function协商,以便在新客户端尝试使用旧守护程序不支持的function时返回适当的错误。 这极大地提高了互操作性,并且使得在同一台机器上pipe理Docker安装不同版本变得更简单。

如果您无法轻松升级服务器,则应该可以轻松降级您的客户端。 Docker是GitHub的开源代码。 版本1.3.3是1.15客户端API的最后一个。 这是直接链接到标签。

只要做一个本地克隆的回购,使build立,使二进制,然后交换生成的二进制文件:

 sudo service docker stop ; sudo cp $(which docker) $(which docker)_ ; sudo cp ./bundles/1.3.3-dev/binary/docker-1.3.3-dev $(which docker);sudo service docker start