Error de Docker: el cliente y el servidor no tienen la misma versión

84

Como acabo de actualizar Docker a 1.1.0, obtengo:

Respuesta de error del demonio: el cliente y el servidor no tienen la misma versión (cliente: 1.13, servidor: 1.12)

¿Sabes cómo arreglar ésto?

Cambié de nuevo a 1.0.1 y todo funciona de nuevo.

soenke
fuente
Tengo el mismo problema al usar boot2docker. ¿Ese también es tu caso?
sigmus
2
sí, también estoy usando boot2docker. después de desinstalar Docker e instalarlo nuevamente (no 'reinstalar'), está funcionando nuevamente. brew desinstalar docker && brew install docker
soenke
4
Tal vez debería editar el título / pregunta para dejar en claro que es un boot2dockerproblema (para referencia futura).
sigmus
Enchufe descarado: un amigo y yo creamos una herramienta llamada Docker Version Manager para ayudar con esto a corto plazo.
Kyle Kelley

Respuestas:

127

Parece que necesita actualizar la máquina virtual después de instalar boot2docker:

Si está actualizando desde boot2docker 0.12 o posterior, puede actualizar su máquina virtual existente (después de actualizar usando el instalador) usando boot2docker stop && boot2docker download && boot2docker up - y no perderá sus datos existentes.

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

Abel Muiño
fuente
3
también brew desinstalar docker && brew install docker hizo el trabajo
soenke
5
Ya no es necesario utilizar la versión de preparación de la herramienta de línea de comandos de la ventana acoplable. Boot2Docker proporciona la versión correcta.
Abel Muiño
Teniendo 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
También me encontré con este problema de certificado. Corrí boot2docker delete, luego boot2docker inity empezó a funcionar.
Dean Wampler
1
Un amigo y yo creamos una herramienta llamada Docker Version Manager para ayudar con esto a corto plazo.
Kyle Kelley
19

Esto puede suceder si ha actualizado Docker, pero el servicio no se ha reiniciado. Luego, intentará conectarse al demonio de Docker con el cliente actualizado, mientras que el demonio (que ya se estaba ejecutando antes de la actualización) todavía ejecuta la versión anterior.

Para solucionar este problema, reinicie el servicio:

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker

BakaKuna
fuente
1
Por systemdlo que se recomienda hacer systemctl daemon-reloadantessystemctl restart docker
calvas
Parece que la respuesta más simple es la mejor :)
Dariss
13

En caso de que utilice docker-machinepara administrar máquinas locales basadas en VirtualBox, la solución es tan simple como para boot2docker:

docker-machine upgrade MACHINE_NAME

Solicita docker-machinedescargar la última versión boot2docker.isoy colocarla como un nuevo sistema de archivos raíz en la máquina virtual actualizada.

Por cierto, la máquina acoplable respaldada por VirtualBox tiene su sistema de archivos raíz de solo lectura. Eso significa que no es posible que ninguna actualización manual sobreviva al reinicio de la máquina. Eso fue una sorpresa para mi.

Pedro
fuente
12

Tenía la última versión de boot2docker, docker y virtual box, pero seguía recibiendo este mensaje. Parece que correr brew upgrade boot2dockerno es la mejor idea. Al ejecutar boot2docker upgrade, se me pidió que estableciera un montón de variables de entorno y luego funcionó para mí.

Boot2docker me pidió que configurara estos (ver las últimas líneas):

$ 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

Es posible cortar y pegar esas tres líneas de una vez en su terminal.

Para comprobar que son correctos:

$ env
Rimiano
fuente
11

Estaba tratando de consultar un servidor Docker con un cliente más reciente:

  • Versión de la API del servidor: 1.21
  • API de cliente versión 1.22

La solución para mí fue simplemente:

export DOCKER_API_VERSION=1.21

Referencia: https://docs.docker.com/engine/reference/commandline/cli/

Marcello Romani
fuente
1
¡Gracias! esto solucionó mi problema
MajiK
1
El hecho de que el protocolo de la ventana acoplable esté versionado y sea compatible con versiones anteriores no debe estar bien documentado ni ser lo suficientemente visible, dada la cantidad de respuestas que (comprensiblemente) llegan a todo tipo de extensión para actualizar la ventana acoplable en varios escenarios ...
Marcello Romani
3

La respuesta correcta aquí es muy antigua (Docker cambió el nombre de boot2docker a Docker Machine y le agregó algunas funciones más) .

De todos modos me enfrenté al mismo problema y me tomó unos 3 días solucionarlo :(

Esta es la solucion

1) encuentre la ubicación del boot2docker.iso

sudo find ~/ -name 'boot2docker.iso'

2) eliminar el boot2docker.isoarchivo, después de realizar una copia de seguridad del mismo

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

3) elimina tu docker vm

docker-machine rm {default}

esto debería eliminar eso también:

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

4) crea una nueva máquina virtual docker

docker-machine create --driver virtualbox default

esto descargará uno nuevo boot2docker.isoprimero y luego lo usará para crear su vm.

Ahora esto debería solucionarlo :)

PERO

Si recibe algún error aquí 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"

intente descargar el boot2docker.isoarchivo manualmente yendo a https://api.github.com/repos/boot2docker/boot2docker/releases/latest, luego haga clic en html_urly finalmente elija descargar el archivo.

una vez que obtenga el archivo, vaya y colóquelo manualmente en /Users/{user}/.docker/machine/cache/

finalmente vuelva a ejecutar este comando docker-machine create --driver virtualbox default

Mahmoud Zalt
fuente
2

Lo único que funcionó para mí fue matar el proceso e iniciarlo con "sudo service docker start".

trinquete
fuente
2

Lo único que funcionó para mí fue eliminar la imagen boot2docker de VirtualBox, luego eliminar completamente la ~/.boot2dockercarpeta y finalmente ejecutarla boot2docker initnuevamente.

dkinzer
fuente
1

boot2docker eliminar

boot2docker init

trabajó para mi. detener / iniciar el demonio antes y después de eso, por supuesto.

apflieger
fuente
1

Esto funcionó para mí: simplemente apaga la máquina virtual, la borra, la recrea y la vuelve a iniciar. Vuelve a ejecutar shellinit para que sus variables ENV se configuren con la dirección IP correcta cuando vuelva a funcionar.

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

Tenía la última versión de boot2docker (v1.7.1) y obtuve el error de falta de coincidencia del servidor cliente. Luego corrí boot2docker upgradey resolvió el problema.

Samitha
fuente
0

Mi solución fue cerrar> Apagar en la ventana acoplable VM en VirtualBox y luego reiniciar Kitematic. Esto me lo arregló.

nuestramaninamsterdam
fuente
0

Encuentro que la versión en brew está desactualizada en comparación con la del sitio web docker.io. Por lo tanto, creo que la mejor manera es ir al sitio web y descargar el archivo de instalación.

Tommy
fuente
0

Respuesta Ansible:

Si vino allí por Ansible y no por boot2docker, aquí está la solución: use el docker_api_version: autoargumento

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

Supongo que la razón es que el módulo docker-py utilizado por Ansible a menudo no es de la misma versión que el repositorio apt-get de Ubuntu.

Nicolás Zozol
fuente