Cliente docker mais recente com host Docker mais antigo

12

Temos um servidor Docker um pouco mais antigo em execução no RHEL 6.6. No momento, não é bem suportado por nossa equipe de operações, portanto não podemos fazer upgrade facilmente. No momento, ele executa o Docker 1.3.2 a partir de um repositório EPEL. Se eu fizer o SSH, ele fará tudo o que for necessário para obter provas de conceito que, esperançosamente, me ajudem a impulsionar o gerenciamento para melhorar o suporte à infraestrutura do Docker no caminho.

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

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

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

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

kojiro
fonte
Use um cliente Docker no RHEL?
Michael Hampton
@MichaelHampton Os desenvolvedores que se conectam a esta caixa de encaixe estão em várias estações de trabalho Windows e OS X. Eles tendem a ter o boot2docker instalado e gostariam de usar o mesmo cliente docker apontado para este host.
kojiro
A escolha ideal, então, é usar uma distribuição Linux que rastreie a versão mais recente do Docker. No momento, esse é o servidor Fedora.
Michael Hampton
Suponho que você gostaria que o pessoal da Operação atualizasse para o RHEL 7, que atualmente parece ser 1.2, e aumentará (como no canal Extras, portanto, pode crescer mais rápido que o Core). Se sua equipe de Ops não pode suportar um RHEL 7 (com o suporte pago da Red Hat), certamente não pode suportar algo mais avançado, como o Fedora. Seus desenvolvedores precisam aceitar que precisam codificar para um ambiente operacional padrão. Consulte também access.redhat.com/solutions/1408853 "Como o Docker é suportado no RHEL 7.1?"
Cameron Kerr #

Respostas:

26

Desde o Docker 1.10.0, existe uma opção para substituir a versão da API usada na comunicação do cliente Docker com o mecanismo do Docker.

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

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. De acordo com https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

A partir da 1.13, as CLIs mais recentes podem conversar 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 simplifica muito o gerenciamento das instalações do Docker com versões diferentes da mesma máquina.

Enderson Maia
fonte
1

Se você não puder atualizar facilmente o servidor, poderá fazer o downgrade fácil do seu cliente. O Docker é de código aberto no GitHub . A versão 1.3.3 foi a última com a API do cliente 1.15. Aqui está um link direto para a tag.

Basta criar um clone local do repositório, criar build, tornar binário e depois 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
allingeek
fonte
registry.hub.docker.com/u/igneoussystems/docker-client parece ser um cliente docker (de uma versão específica) dentro de um contêiner docker. Parece estar falhando na criação no momento, mas talvez isso dê alguma utilidade ... pode exigir um pouco de esforço, mas algumas ferramentas devem ser bem dimensionadas para fornecer várias versões do cliente docker.
Cameron Kerr
1
Descobri que você também pode baixar clientes pré-criados diretamente. Você pode derivar a URL do script de instalação em get.docker.com . Por exemplo, eu precisava get.docker.com/builds/Darwin/x86_64/docker-1.3.2 para OS X.
kojiro