Client Docker plus récent avec hôte Docker plus ancien

12

Nous avons un serveur Docker légèrement plus ancien fonctionnant sur RHEL 6.6. Il n'est pas bien pris en charge par notre équipe d'exploitation pour le moment, nous ne pouvons donc pas mettre à niveau facilement. À l'heure actuelle, il exécute Docker 1.3.2 à partir d'un dépôt EPEL. Si je le fais, il fait tout ce dont j'ai besoin pour des preuves de concept qui, je l'espère, m'aideront à pousser la direction à améliorer la prise en charge de l'infrastructure pour Docker.

Je l'ai configuré pour écouter sur TCP / TLS, et je suis capable de me connecter, mais il refuse d'exécuter les commandes données par mon client docker local.

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

Je sais que la connexion elle-même fonctionne car elle figfonctionne:

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

Existe-t-il un moyen de dire au nouveau client Docker d'utiliser l'ancienne version de l'API Docker jusqu'à ce que je puisse accéder à un hôte Docker plus récent?

kojiro
la source
Vous utilisez un client Docker sur RHEL?
Michael Hampton
@MichaelHampton Les développeurs qui se connectent à cette station d'accueil sont sur divers postes de travail Windows et OS X. Ils ont tendance à avoir boot2docker installé et souhaitent utiliser le même client docker pointé vers cet hôte.
kojiro
Le choix idéal est alors d'utiliser une distribution Linux qui suit la dernière version de Docker. Pour le moment, c'est Fedora Server.
Michael Hampton
Je suppose que vous aimeriez que les gars d'Operation passent à RHEL 7, qui semble actuellement être 1.2, et incrémentera (comme c'est le cas dans le canal Extras, donc peut croître plus rapidement que le Core). Si votre équipe Ops ne peut pas prendre en charge un RHEL 7 (avec le support payant de Red Hat), alors elle ne peut certainement pas prendre en charge quelque chose de plus innovant comme Fedora. Vos développeurs doivent simplement accepter qu'ils doivent coder dans un environnement d'exploitation standard. Voir aussi access.redhat.com/solutions/1408853 "Comment Docker est-il pris en charge dans RHEL 7.1?"
Cameron Kerr

Réponses:

26

Depuis Docker 1.10.0, il existe une option pour remplacer la version d'API utilisée pour la communication du client Docker avec le moteur Docker.

Juste en utilisant la variable d'environnement 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

Référence: https://docs.docker.com/engine/reference/commandline/cli/#environment-variables

ÉDITER

Depuis Docker 1.13, CLI a une compatibilité descendante améliorée. Selon https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

À partir de la version 1.13, les CLI plus récentes peuvent communiquer avec les démons plus anciens. Nous ajoutons également la négociation de fonctionnalités afin que les erreurs appropriées soient renvoyées si un nouveau client tente d'utiliser des fonctionnalités non prises en charge dans un démon plus ancien. Cela améliore considérablement l'interopérabilité et facilite la gestion des installations Docker avec différentes versions de la même machine.

Enderson Maia
la source
1

Si vous ne pouvez pas facilement mettre à niveau le serveur, vous devriez pouvoir rétrograder facilement votre client. Docker est open source sur GitHub . La version 1.3.3 était la dernière avec l'API client 1.15. Voici un lien direct vers le tag.

Faites simplement un clone local du référentiel, faites un build, faites un binaire puis échangez le binaire produit:

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
la source
Registry.hub.docker.com/u/igneoussystems/docker-client semble être un client Docker (d'une version spécifique) à l'intérieur d'un conteneur Docker. Semble ne pas réussir à construire pour le moment, mais cela donnerait peut-être une certaine utilité ... peut nécessiter un peu d'effort mais avec certains outils, il devrait bien évoluer pour fournir plusieurs versions du client docker.
Cameron Kerr
1
J'ai découvert que vous pouvez également télécharger directement des clients prédéfinis. Vous pouvez dériver l'URL à partir du script d'installation sur get.docker.com . Par exemple, j'avais besoin de get.docker.com/builds/Darwin/x86_64/docker-1.3.2 pour OS X.
kojiro