Client docker più recente con host Docker precedente


12

Abbiamo un server Docker leggermente più vecchio in esecuzione su RHEL 6.6. Al momento non è ben supportato dal nostro team operativo, quindi non possiamo eseguire facilmente l'aggiornamento. In questo momento esegue Docker 1.3.2 da un repository EPEL. Se lo faccio, fa tutto ciò di cui ho bisogno per una dimostrazione del concetto che, eventualmente, mi aiuterà a spingere la direzione per migliorare il supporto dell'infrastruttura per Docker lungo la strada.

L'ho impostato per l'ascolto su TCP / TLS e sono in grado di connettermi ad esso, ma si rifiuta di eseguire i comandi forniti dal mio client docker locale.

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

So che la connessione stessa funziona perché figfunziona:

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

Esiste un modo in cui posso dire al client docker più recente di utilizzare la versione dell'API docker precedente finché non riesco ad accedere a un host docker più recente?


Utilizzare un client Docker su RHEL?
Michael Hampton

@MichaelHampton Gli sviluppatori che si collegano a questa finestra mobile si trovano su varie workstation Windows e OS X. Tendono a installare boot2docker e vorrebbero utilizzare lo stesso client docker puntato su questo host.
Kojiro,

La scelta ideale, quindi, è usare una distribuzione Linux che tenga traccia dell'ultima versione di Docker. Al momento, questo è Fedora Server.
Michael Hampton

Suppongo che vorresti che i ragazzi dell'Operazione si aggiornassero a RHEL 7, che attualmente sembra essere 1.2, e aumenterà (come nel canale Extras, quindi può crescere più velocemente del Core). Se il tuo team Ops non è in grado di supportare un RHEL 7 (con il supporto pagato di Red Hat), sicuramente non può supportare qualcosa di più sanguinante come Fedora. I tuoi sviluppatori devono solo accettare che devono codificare in un ambiente operativo standard. Vedi anche access.redhat.com/solutions/1408853 "In che modo Docker è supportato in RHEL 7.1?"
Cameron Kerr,

Risposte:


26

Da Docker 1.10.0, esiste un'opzione per sovrascrivere la versione API utilizzata per le comunicazioni client Docker con il motore Docker.

Semplicemente usando la variabile d'ambiente 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

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

MODIFICARE

Dalla Docker 1.13, la CLI ha una compatibilità con le versioni precedenti migliorata. Secondo https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

A partire da 1.13, le CLI più recenti possono parlare con demoni più vecchi. Stiamo anche aggiungendo la negoziazione delle funzionalità in modo che vengano restituiti errori corretti se un nuovo client sta tentando di utilizzare funzionalità non supportate in un demone più vecchio. Ciò migliora notevolmente l'interoperabilità e semplifica la gestione delle installazioni Docker con versioni diverse dalla stessa macchina.


1

Se non è possibile aggiornare facilmente il server, si dovrebbe essere in grado di eseguire facilmente il downgrade del client. Docker è open source su GitHub . La versione 1.3.3 era l'ultima con l'API client 1.15. Ecco un link diretto al tag.

Basta creare un clone locale del repository, creare build, creare binario e quindi scambiare il binario prodotto:

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

register.hub.docker.com/u/igneoussystems/docker-client sembra essere un client docker (di una versione specifica) all'interno di un contenitore docker. Sembra non riuscire a costruire in questo momento, ma forse ciò darebbe un po 'di utilità .... potrebbe richiedere un po' di sforzo, ma con alcuni strumenti dovrebbe ridimensionarsi bene per fornire più versioni del client docker.
Cameron Kerr,

1
Ho scoperto che puoi anche scaricare direttamente i client predefiniti. È possibile derivare l'URL dallo script di installazione su get.docker.com . Ad esempio, avevo bisogno di get.docker.com/builds/Darwin/x86_64/docker-1.3.2 per OS X.
kojiro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.