带有较旧 Docker 主机的较新 docker 客户端

koj*_*iro 12 docker

我们有一个在 RHEL 6.6 上运行的稍旧的 Docker 服务器。现在我们的运营团队没有很好地支持它,所以我们不能轻易升级。现在它从 EPEL 存储库运行 Docker 1.3.2。如果我通过 ssh 来完成概念验证所需的一切,这将有望帮助我推动管理以改进对 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)
Run Code Online (Sandbox Code Playgroud)

我知道连接本身有效,因为fig有效:

$ cat > fig.yml
test:
    image: busybox
$ fig run --rm test sh
/ # hostname -f
084f75fb59d4
Run Code Online (Sandbox Code Playgroud)

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

小智 26

从 Docker 1.10.0 开始,有一个选项可以覆盖用于 Docker 客户端与 Docker 引擎通信的 API 版本。

只需使用 DOCKER_API_VERSION 环境变量。

前任。:

$ 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
Run Code Online (Sandbox Code Playgroud)

参考: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 可以与旧的守护进程通信。我们还添加了功能协商,以便在新客户端尝试使用旧守护程序不支持的功能时返回正确的错误。这极大地提高了互操作性,并使在同一台机器上管理不同版本的 Docker 安装变得更加简单。