Cliente Docker más nuevo con host Docker más antiguo

Tenemos un servidor Docker un poco más antiguo que se ejecuta en RHEL 6.6. En este momento, nuestro equipo de operaciones no lo admite bien, por lo que no podemos actualizarlo fácilmente. En este momento ejecuta Docker 1.3.2 desde un repositorio de EPEL. Si uso ssh, hace todo lo que necesito para las pruebas de concepto que, con suerte, me ayudarán a impulsar la administración para mejorar el soporte de infraestructura para Docker en el futuro.

Lo configuré para escuchar en TCP/TLS, y puedo conectarme a él, pero se niega a ejecutar los comandos dados por mi cliente docker local.

$ docker versionClient version: 1.4.1Client API version: 1.16Go version (client): go1.4Git commit (client): 5bc2ff8OS/Arch (client): darwin/amd64FATA[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15)

Sé que la conexión en sí funciona porque fig obrar:

$ cat > fig.ymltest:    image: busybox$ fig run --rm test sh/ # hostname -f084f75fb59d4

¿Hay alguna forma de decirle al cliente docker más nuevo que use la versión anterior de la API de docker hasta que pueda acceder a un host docker más nuevo?

Desde Docker 1.10.0, hay una opción para anular la versión de API utilizada para la comunicación del cliente de Docker con Docker Engine.

Simplemente usando la variable de entorno DOCKER_API_VERSION.

De.:

$ docker versionClient: 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/amd64Error response from daemon: client is newer than server (client API version: 1.22, server API version: 1.21)$ DOCKER_API_VERSION=1.21 docker versionClient: 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/amd64Server: 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

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

EDITAR

Desde Docker 1.13, CLI tiene una compatibilidad con versiones anteriores mejorada. De acuerdo con https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

A partir de la versión 1.13, las CLI más nuevas pueden comunicarse con los demonios más antiguos. También estamos agregando la negociación de características para que se devuelvan los errores adecuados si un nuevo cliente intenta usar características no admitidas en un daemon anterior. Esto mejora en gran medida la interoperabilidad y hace que sea mucho más sencillo administrar las instalaciones de Docker con diferentes versiones de la misma máquina.

Si no puede actualizar fácilmente el servidor, debería poder degradar fácilmente su cliente. Docker es de código abierto en En GitHub. La versión 1.3.3 fue la última con la API de cliente 1.15. Aqui es un enlace directo a la etiqueta.

Simplemente haga un clon local del repositorio, haga build, haga binary y luego intercambie el binario producido:

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

¿Utiliza un cliente de Docker en RHEL?

@MichaelHampton Los desarrolladores que se conectan a este docker box se encuentran en varias estaciones de trabajo de Windows y OS X. Tienden a tener boot2docker instalado y les gustaría usar el mismo cliente docker que apunta a este host.

La opción ideal, entonces, es usar una distribución de Linux que rastree la última versión de Docker. Por el momento, ese es el servidor Fedora.

Supongo que le gustaría que los chicos de Operación se actualicen a RHEL 7, que actualmente parece ser 1.2, y se incrementará (ya que está en el canal de Extras, por lo que puede crecer más rápido que el Núcleo). Si su equipo de operaciones no puede soportar un RHEL 7 (con soporte pagado de Red Hat), entonces ciertamente no pueden soportar algo más innovador como Fedora. Sus desarrolladores solo necesitan aceptar que necesitan codificar en un entorno operativo estándar. Véase también https://access.redhat.com/solutions/1408853 “¿Cómo se admite Docker en RHEL 7.1?”