Neuerer Docker-Client mit älterem Docker-Host

12

Wir haben einen etwas älteren Docker-Server auf RHEL 6.6. Es wird derzeit von unserem Betriebsteam nicht gut unterstützt, daher können wir nicht einfach ein Upgrade durchführen. Derzeit wird Docker 1.3.2 von einem EPEL-Repository ausgeführt. Wenn ich dabei bin, wird alles getan, was ich für Proofs-of-Concept benötige, was mir hoffentlich dabei helfen wird, das Management dazu zu bringen, die Infrastrukturunterstützung für Docker in Zukunft zu verbessern.

Ich habe es so eingerichtet, dass es TCP / TLS überwacht, und ich kann eine Verbindung herstellen, aber es weigert sich, Befehle auszuführen, die von meinem lokalen Docker-Client gegeben wurden.

$ 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)

Ich weiß, dass die Verbindung selbst funktioniert, weil figfunktioniert:

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

Kann ich dem neueren Docker-Client mitteilen, dass er die ältere Docker-API-Version verwenden soll, bis ich auf einen neueren Docker-Host zugreifen kann?

Kojiro
quelle
Verwenden Sie einen Docker- Client auf RHEL?
Michael Hampton
@MichaelHampton Die Entwickler, die eine Verbindung zu dieser Docking-Box herstellen, befinden sich auf verschiedenen Windows- und OS X-Arbeitsstationen. Sie haben in der Regel boot2docker installiert und möchten denselben Docker-Client verwenden, der auf diesen Host verweist.
Kojiro
Die ideale Wahl ist daher die Verwendung einer Linux-Distribution, die die neueste Docker-Version verfolgt. Im Moment ist das Fedora Server.
Michael Hampton
Ich vermute, dass Sie möchten, dass die Operation-Leute auf RHEL 7 upgraden, das derzeit auf 1.2 zu stehen scheint, und es inkrementieren wird (wie es im Extras-Kanal ist, also schneller wachsen kann als der Core). Wenn Ihr Ops-Team einen RHEL 7 nicht unterstützen kann (mit bezahlter Unterstützung von Red Hat), dann kann es mit Sicherheit keine aktuelleren Funktionen wie Fedora unterstützen. Ihre Entwickler müssen lediglich akzeptieren, dass sie in einer Standardbetriebsumgebung codieren müssen. Siehe auch access.redhat.com/solutions/1408853 "Wie wird Docker in RHEL 7.1 unterstützt?"
Cameron Kerr

Antworten:

26

Seit Docker 1.10.0 gibt es eine Option zum Überschreiben der API-Version, die für die Docker-Client-Kommunikation mit Docker Engine verwendet wird.

Nur mithilfe der Umgebungsvariablen DOCKER_API_VERSION.

Ex.:

$ 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

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

BEARBEITEN

Seit Docker 1.13 verfügt CLI über eine verbesserte Abwärtskompatibilität. Laut https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

Ab 1.13 können neuere CLIs mit älteren Daemons kommunizieren. Wir fügen auch die Feature-Aushandlung hinzu, damit korrekte Fehler zurückgegeben werden, wenn ein neuer Client versucht, Features zu verwenden, die in einem älteren Dämon nicht unterstützt werden. Dies verbessert die Interoperabilität erheblich und vereinfacht die Verwaltung von Docker-Installationen mit verschiedenen Versionen auf demselben Computer.

Enderson Maia
quelle
1

Wenn Sie den Server nicht einfach aktualisieren können, sollten Sie Ihren Client problemlos downgraden können. Docker ist Open Source bei GitHub . Version 1.3.3 war die letzte mit der 1.15-Client-API. Hier ist ein direkter Link zum Tag.

Erstelle einfach einen lokalen Klon des Repos, erstelle einen Build, erstelle eine Binärdatei und tausche dann die erzeugte Binärdatei aus:

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
allingeek
quelle
registry.hub.docker.com/u/igneoussystems/docker-client scheint ein Docker-Client (einer bestimmten Version) in einem Docker-Container zu sein. Scheint im Moment nicht zu funktionieren, aber vielleicht würde das etwas Sinnvolles bringen. Vielleicht ist es ein bisschen mühsam, aber mit einigen Werkzeugen sollte es gut skalierbar sein, um mehrere Versionen des Docker-Clients bereitzustellen.
Cameron Kerr
1
Ich habe festgestellt, dass Sie vorgefertigte Clients auch direkt herunterladen können. Sie können die URL aus dem Installationsskript unter get.docker.com ableiten . Zum Beispiel brauchte ich get.docker.com/builds/Darwin/x86_64/docker-1.3.2 für OS X.
kojiro