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


12

我们在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)

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

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

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


在RHEL上使用Docker 客户端
迈克尔·汉普顿

@MichaelHampton连接到此docker框的开发人员在各种Windows和OS X工作站上。他们倾向于安装了boot2docker,并希望使用指向该主机的相同docker客户端。
kojiro'2

因此,理想的选择是使用可跟踪最新Docker版本的Linux发行版。目前,这就是Fedora服务器。
迈克尔·汉普顿

我猜想您想让运维人员升级到RHEL 7,目前看来是1.2,并且会增加(因为它在Extras通道中,因此可以比Core更快地增长)。如果您的Ops团队不能支持RHEL 7(在Red Hat的付费支持下),那么他们当然不能支持诸如Fedora之类的尖端技术。您的开发人员只需要接受他们需要对标准操作环境进行编码即可。另请参见access.redhat.com/solutions/1408853 “ RHEL 7.1如何支持Docker?”
卡梅隆·克尔

Answers:


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

参考: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安装变得更加简单。


1

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

只需对存储库进行本地克隆,构建,生成二进制文件,然后交换生成的二进制文件即可:

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

Registry.hub.docker.com/u/igneoussystems/docker-client似乎是docker容器内的docker客户端(具有特定版本)。目前似乎无法构建,但这也许会带来一些用处……可能需要付出一些努力,但是通过一些工具应该可以很好地扩展以提供多个版本的Docker客户端。
卡梅伦·克尔

1
我发现您也可以直接下载预构建的客户端。您可以从get.docker.com上的安装脚本派生URL 。例如,我需要get.docker.com/builds/Darwin/x86_64/docker-1.3.2为OS X
小次郎
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.