Erro do Docker: cliente e servidor não têm a mesma versão

84

Como acabei de atualizar o Docker para 1.1.0, recebo:

Resposta de erro do daemon: cliente e servidor não têm a mesma versão (cliente: 1.13, servidor: 1.12)

Você sabe como consertar isso?

Voltei para 1.0.1 e tudo funciona novamente.

Soenke
fonte
Estou com o mesmo problema, usando boot2docker. Esse também é o seu caso?
sigmus
2
sim, também estou usando o boot2docker. após desinstalar o docker e instalá-lo novamente (não 'reinstalar'), ele estará funcionando novamente. brew uninstall docker && brew install docker
soenke
4
Talvez você deva editar o título / pergunta para deixar claro que é um boot2dockerproblema (para referência futura).
sigmus
Plugue sem vergonha: um amigo e eu criamos uma ferramenta chamada Docker Version Manager para ajudar com isso em curto prazo.
Kyle Kelley

Respostas:

127

Parece que você precisa atualizar a VM após instalar o boot2docker:

se estiver atualizando do boot2docker 0.12 ou posterior, você pode atualizar sua máquina virtual existente (após atualizar usando o instalador) usando boot2docker stop && boot2docker download && boot2docker up - e você não perderá seus dados existentes.

( https://github.com/boot2docker/osx-installer/releases/tag/v1.1.0 )

Abel Muiño
fonte
3
também brew uninstall docker && brew install docker fez o trabalho
soenke
5
Você não precisa mais usar a versão brew da ferramenta de linha de comando docker. Boot2Docker fornece a versão certa.
Abel Muiño
Tendo An error occurred trying to connect: Get https://192.168.59.103:2376/v1.19/containers/json?all=1: x509: certificate is valid for 127.0.0.1, 10.0.2.15, not 192.168.59.103: /
Ain Tohvri
1
Também encontrei este problema de certificado. Corri boot2docker delete, então boot2docker inite começou a funcionar.
Dean Wampler
1
Um amigo e eu criamos uma ferramenta chamada Docker Version Manager para ajudar com isso em curto prazo.
Kyle Kelley
19

Isso pode acontecer se você atualizou o Docker, mas o serviço não foi reiniciado. Em seguida, você tentará se conectar ao daemon Docker com o cliente atualizado, enquanto o daemon (que já estava em execução antes da atualização) ainda está executando a versão mais antiga.

Para corrigir isso, reinicie o serviço:

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker

BakaKuna
fonte
1
Pois systemdé recomendado fazer systemctl daemon-reloadantessystemctl restart docker
baldrs
Parece que a resposta mais simples é a melhor resposta :)
Dariss
13

No caso de você usar docker-machinepara gerenciar máquinas locais baseadas em VirtualBox, a solução é tão simples quanto para boot2docker:

docker-machine upgrade MACHINE_NAME

Ele pede docker-machinepara fazer o download do último boot2docker.isoe colocá-lo como um novo sistema de arquivos raiz na VM atualizada.

A propósito, a máquina docker apoiada pelo VirtualBox tem seu sistema de arquivos raiz somente leitura. Isso significa que não é possível que nenhuma atualização manual sobreviva à reinicialização da máquina. Isso foi uma surpresa para mim.

Peter
fonte
12

Eu tinha a versão mais recente do boot2docker, docker e caixa virtual, mas ainda estava recebendo esta mensagem. Parece que correr brew upgrade boot2dockernão é a melhor ideia. Ao correrboot2docker upgrade , fui solicitado a definir várias variáveis ​​de ambiente e funcionou para mim.

Boot2docker me pediu para definir estes (veja as últimas linhas):

$ boot2docker upgrade
Latest release for boot2docker/boot2docker is v1.3.0
Downloading boot2docker ISO image...
Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.3.0/boot2docker.iso
    to /Users/.../.boot2docker/boot2docker.iso
Waiting for VM and Docker daemon to start...
.........oooooooooooooo
Started.
Writing /Users/.../.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/.../.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/.../.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/.../.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

É possível cortar e colar essas três linhas de uma vez, em seu terminal.

Para verificar se estão corretos:

$ env
Rimian
fonte
11

Eu estava tentando consultar um servidor Docker com um cliente mais recente:

  • Versão da API do servidor: 1.21
  • API cliente versão 1.22

A solução para mim foi apenas:

export DOCKER_API_VERSION=1.21

Referência: https://docs.docker.com/engine/reference/commandline/cli/

Marcello Romani
fonte
1
Obrigado! isso resolveu meu problema
MajiK
1
O fato de o protocolo docker ser versionado e compatível com versões anteriores não deve ser bem documentado, ou visível o suficiente, dada a quantidade de respostas que (compreensivelmente) vão para todos os tipos de comprimento para atualizar o docker em vários cenários ...
Marcello Romani
3

A resposta correta aqui é muito antiga (o Docker renomeou boot2docker para Docker Machine e adicionou mais algumas funcionalidades a ele) .

Enfim, enfrentei o mesmo problema e levei cerca de 3 dias para consertar :(

Aqui está a solução

1) encontre a localização do boot2docker.iso

sudo find ~/ -name 'boot2docker.iso'

2) excluir o boot2docker.isoarquivo, após fazer um backup dele

/Users/{user}/.docker/machine/cache/boot2docker.iso

3) exclua seu docker vm

docker-machine rm {default}

isso deve excluir aquele também:

/Users/{user}/.docker/machine/machines/default/boot2docker.iso

4) criar um novo docker vm

docker-machine create --driver virtualbox default

isso fará o download de um novo boot2docker.isoprimeiro e, em seguida, o utilizará para criar sua VM.

Agora isso deve consertar :)

MAS

Se você receber algum erro aqui, como:

Running pre-create checks...
(mega-docker) No default Boot2Docker ISO found locally, downloading the latest release...
Error with pre-create check: "Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: dial tcp: lookup api.github.com on 192.168.0.1:53: read udp 192.168.0.103:53947->192.168.0.1:53: i/o timeout"

tente baixar o boot2docker.isoarquivo manualmente indo para https://api.github.com/repos/boot2docker/boot2docker/releases/latest , clicando em html_urle finalmente escolhendo fazer o download do arquivo.

depois de obter o arquivo, coloque-o manualmente no /Users/{user}/.docker/machine/cache/

finalmente execute novamente este comando docker-machine create --driver virtualbox default

Mahmoud Zalt
fonte
2

A única coisa que funcionou para mim foi eliminar o processo e iniciá-lo com "sudo service docker start".

lingueta
fonte
2

A única coisa que funcionou para mim foi remover a imagem boot2docker do VirtualBox, excluir completamente a ~/.boot2dockerpasta e, finalmente, executar boot2docker initnovamente.

Dkinzer
fonte
1

boot2docker delete

inicialização boot2docker

trabalhou para mim. parar / iniciar o demônio antes e depois disso, é claro.

Apflieger
fonte
1

Isso funcionou para mim: ele apenas desliga a VM, exclui e recria e inicia novamente. Ele executa novamente o shellinit para que suas variáveis ​​ENV sejam configuradas com o endereço IP correto quando ele voltar.

$ boot2docker poweroff && \
    boot2docker delete && \
    boot2docker init && \
    boot2docker up
$ eval `boot2docker shellinit`
0xADADA
fonte
0

Eu tinha a versão mais recente do boot2docker (v1.7.1) e recebi o erro de incompatibilidade do servidor cliente. Então eu apenas corri boot2docker upgradee resolveu o problema.

Samitha
fonte
0

Minha solução foi fazer um Close> Power Off no docker VM no VirtualBox e, em seguida, reiniciar o Kitematic. Isso consertou para mim.

Ourmaninamsterdam
fonte
0

Acho que a versão no brew está desatualizada em comparação com a do site docker.io. Portanto, acho que a melhor maneira é ir ao site e baixar o arquivo de instalação.

Tommy
fonte
0

Resposta Ansible:

Se você veio por Ansible e não boot2docker, aqui está a solução: Use o docker_api_version: autoargumento

- name: Mongo data container
  docker:
    docker_api_version: auto
    name: mongo-primary-dc
    image: debian:wheezy
    state: present
    volumes:
    - /data

Acho que a razão é que o módulo docker-py usado pelo Ansible geralmente não está na mesma versão do repositório apt-get do Ubuntu.

Nicolas Zozol
fonte