Cliente docker mais recente com host Docker mais antigo

Temos um servidor Docker um pouco mais antigo em execução no RHEL 6.6. Não é bem suportado por nossa equipe de operações agora, então não podemos atualizar facilmente. No momento, ele executa o Docker 1.3.2 de um repo EPEL. Se eu ssh fizer tudo o que preciso para provas de conceito que, com sorte, me ajudarão a impulsionar o gerenciamento para melhorar o suporte à infraestrutura do Docker no futuro.

Eu o configurei para ouvir no TCP / TLS e consigo me conectar a ele, mas ele se recusa a executar comandos fornecidos pelo meu 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)

Eu sei que a conexão em si funciona porque fig obra:

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

Existe alguma maneira de dizer ao cliente docker mais recente para usar a versão mais antiga da API docker até que eu possa acessar um host docker mais recente?

Desde o Docker 1.10.0, há uma opção para substituir a versão da API usada para comunicação do cliente Docker com o Docker engine.

Apenas usando a variável de ambiente 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

Referência: https://docs.docker.com/engine/reference/commandline/cli/#environment-variables

EDITAR

Desde o Docker 1.13, a CLI tem uma compatibilidade com versões anteriores aprimorada. Segundar https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

Começando com 1.13, os CLIs mais novos podem falar com daemons mais antigos. Também estamos adicionando negociação de recursos para que erros adequados sejam retornados se um novo cliente estiver tentando usar recursos não suportados em um daemon mais antigo. Isso melhora muito a interoperabilidade e torna muito mais simples gerenciar as instalações do Docker com versões diferentes da mesma máquina.

Se você não pode facilmente atualizar o servidor, você deve ser capaz de facilmente downgrade seu cliente. Docker é open source em GitHub. A versão 1.3.3 foi a última com a API do cliente 1.15. Aqui é um link direto para a tag.

Basta fazer um clone local do repo, fazer build, fazer binário e, em seguida, trocar o binário produzido:

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

Use um Docker client no RHEL?

@ MichaelHampton os desenvolvedores que se conectam a esta caixa docker estão em várias estações de trabalho do Windows e OS X. Eles tendem a ter boot2docker instalado e gostaria de usar o mesmo cliente docker apontado para este host.

A escolha ideal, então, é usar uma distribuição Linux que rastreia a versão mais recente do Docker. No momento, esse é o servidor Fedora.

Suponho que você gostaria que os caras da operação atualizassem para o RHEL 7, que atualmente parece ser 1.2, e aumentará (como está no canal Extras, então pode crescer mais rápido que o núcleo). Se sua equipe de operações não pode suportar um RHEL 7 (com o suporte pago da Red Hat), então eles certamente não podem suportar algo mais sangrento, como o Fedora. Seus desenvolvedores só precisam aceitar que precisam codificar para um ambiente operacional padrão. Ver também https://access.redhat.com/solutions/1408853 " como o Docker é suportado no RHEL 7.1?"