古い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

新しいドッカーホストにアクセスできるようになるまで、新しいドッカークライアントに古いドッカーAPIバージョンを使用するように指示する方法はありますか?


RHELでDocker クライアントを使用しますか?
マイケルハンプトン

@MichaelHamptonこのドッカーボックスに接続する開発者は、さまざまなWindowsおよびOS Xワークステーションにいます。彼らはboot2dockerをインストールする傾向があり、このホストを指す同じdockerクライアントを使用したいと考えています。
小次郎

したがって、理想的な選択は、最新のDockerバージョンを追跡するLinuxディストリビューションを使用することです。現時点では、それはFedora Serverです。
マイケルハンプトン

オペレーション担当者をRHEL 7にアップグレードしてほしいと思います。RHEL7は現在 1.2であるように見え、増分されます(エクストラチャンネルと同様に、コアよりも速く成長できます)。OpsチームがRHEL 7(Red Hatの有料サポート付き)をサポートできない場合、Fedoraなどの最先端のものをサポートすることはできません。開発者は、標準のオペレーティング環境にコーディングする必要があることを受け入れる必要があります。access.redhat.com/solutions/1408853「RHEL7.1での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

リファレンス: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クライアントのようです。現時点ではビルドに失敗しているように見えますが、おそらくそれはある程度の有用性をもたらすでしょう。
キャメロンカー

1
ビルド済みのクライアントを直接ダウンロードすることもできます。get.docker.comのインストールスクリプトからURLを取得できます。例えば、私は必要なget.docker.com/builds/Darwin/x86_64/docker-1.3.2 OS X用の
小次郎
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.