Errore Docker: client e server non hanno la stessa versione


84

Dato che ho appena aggiornato Docker alla 1.1.0, ottengo:

Risposta di errore dal daemon: client e server non hanno la stessa versione (client: 1.13, server: 1.12)

Sai come aggiustarlo?

Sono tornato alla 1.0.1 e tutto funziona di nuovo.


Ho lo stesso problema, usando boot2docker. È anche questo il tuo caso?
sigmus

2
sì, sto anche usando boot2docker. dopo aver disinstallato Docker e reinstallato (non "reinstallato"), funziona di nuovo. brew disinstalla docker & & brew install
docker

4
Forse dovresti modificare il titolo / domanda per chiarire che si tratta di un boot2dockerproblema (per riferimento futuro).
sigmus

Spina spudorata: io e un amico abbiamo messo insieme uno strumento chiamato Docker Version Manager per aiutarti a breve termine.
Kyle Kelley

Risposte:


127

Sembra che sia necessario aggiornare la VM dopo aver installato boot2docker:

se stai aggiornando da boot2docker 0.12 o successivo, puoi aggiornare la tua macchina virtuale esistente (dopo l'aggiornamento usando il programma di installazione) usando boot2docker stop && boot2docker download && boot2docker up - e non perderai i tuoi dati esistenti.

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


3
anche brew disinstallare docker & & brew install docker ha fatto il lavoro
soenke

5
Non è più necessario utilizzare la versione brew dello strumento da riga di comando docker. Boot2Docker fornisce la versione giusta.
Abel Muiño

Avendo 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
Mi sono imbattuto anche in questo problema di certificato. boot2docker deleteAllora ho corso boot2docker inite ha iniziato a funzionare.
Dean Wampler,

1
Un amico e io abbiamo messo insieme uno strumento chiamato Docker Version Manager per aiutare con questo a breve termine.
Kyle Kelley

19

Ciò può accadere se hai aggiornato Docker, ma il servizio non è stato riavviato. Si proverà quindi a connettersi al daemon Docker con il client aggiornato, mentre il daemon (che era già in esecuzione prima dell'aggiornamento) sta ancora eseguendo la versione precedente.

Per risolvere questo problema, riavvia il servizio:

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker


1
Perché systemdsi consiglia di farlo systemctl daemon-reloadprimasystemctl restart docker
baldrs

Sembra che la risposta più semplice sia la risposta migliore :)
Dariss

13

Nel caso in cui utilizzi docker-machineper gestire una macchina basata su VirtualBox locale, la soluzione è semplice come per boot2docker:

docker-machine upgrade MACHINE_NAME

Chiede docker-machinedi scaricare l'ultima boot2docker.isoe posizionarla come nuovo filesystem di root nella VM aggiornata.

A proposito, la macchina docker supportata da VirtualBox ha il suo filesystem di root in sola lettura. Ciò significa che non è possibile che alcun aggiornamento manuale sopravviva al riavvio della macchina. È stata una sorpresa per me.


12

Avevo l'ultima versione di boot2docker, docker e virtual box ma ricevevo ancora questo messaggio. Sembra che correre brew upgrade boot2dockernon sia l'idea migliore. Durante l'esecuzione boot2docker upgrade, mi è stato chiesto di impostare un gruppo di variabili di ambiente e poi ha funzionato per me.

Boot2docker mi ha chiesto di impostare questi (vedi le ultime righe):

$ 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

È possibile tagliare e incollare queste tre linee in una volta sola, nel tuo terminale.

Per verificare che siano corretti:

$ env

11

Stavo cercando di interrogare un server Docker con un client più recente:

  • Versione API del server: 1.21
  • Versione API client 1.22

La soluzione per me era semplicemente:

export DOCKER_API_VERSION=1.21

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


1
Grazie! questo ha risolto il mio problema
MajiK

1
Il fatto che il protocollo docker sia dotato di versione e retrocompatibile non deve essere ben documentato, o abbastanza visibile, data la quantità di risposte che (comprensibilmente) fanno di tutto per aggiornare docker in vari scenari ...
Marcello Romani

3

La risposta corretta qui è molto vecchia (Docker ha rinominato boot2docker in Docker Machine e ha aggiunto alcune funzionalità in più) .

Comunque ho affrontato lo stesso problema e mi ci sono voluti circa 3 giorni per risolverlo :(

Ecco la soluzione

1) trova la posizione del file boot2docker.iso

sudo find ~/ -name 'boot2docker.iso'

2) eliminare il boot2docker.isofile, dopo averne eseguito un backup

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

3) elimina il tuo file docker vm

docker-machine rm {default}

questo dovrebbe eliminare anche quello:

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

4) crea un nuovo docker vm

docker-machine create --driver virtualbox default

questo scaricherà boot2docker.isoprima un nuovo e poi lo userà per creare la tua VM.

Ora questo dovrebbe risolverlo :)

MA

Se ricevi un errore qui come:

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"

prova a scaricare il boot2docker.isofile manualmente andando su https://api.github.com/repos/boot2docker/boot2docker/releases/latest quindi facendo clic su html_urle infine scegliendo di scaricare il file.

una volta ottenuto il file, posizionalo manualmente in /Users/{user}/.docker/machine/cache/

finalmente riesegui questo comando docker-machine create --driver virtualbox default


2

L'unica cosa che ha funzionato per me è stata uccidere il processo e avviarlo con "sudo service docker start".


2

L'unica cosa che ha funzionato per me è stata la rimozione dell'immagine boot2docker da VirtualBox, quindi l'eliminazione completa della ~/.boot2dockercartella e infine l'esecuzione di boot2docker initnuovo.


1

boot2docker elimina

boot2docker init

ha funzionato per me. fermare / avviare il demone prima e dopo ovviamente.


1

Questo ha funzionato per me: spegne semplicemente il VM, lo elimina e lo ricrea e lo riavvia. Esegue nuovamente shellinit in modo che le tue variabili ENV vengano impostate con l'indirizzo IP corretto quando ritorna.

$ boot2docker poweroff && \
    boot2docker delete && \
    boot2docker init && \
    boot2docker up
$ eval `boot2docker shellinit`

0

Avevo l'ultima versione di boot2docker (v1.7.1) e ho ricevuto l'errore di mancata corrispondenza del server client. Poi ho appena corso boot2docker upgradee ha risolto il problema.


0

La mia soluzione era di fare un Chiudi> Spegni sulla VM docker in VirtualBox, quindi riavviare Kitematic. Questo ha risolto il problema per me.


0

Trovo che la versione in brew sia obsoleta rispetto a quella sul sito docker.io. Pertanto penso che il modo migliore sia andare sul sito Web e scaricare il file di installazione.


0

Risposta rispondibile:

Se sei arrivato da Ansible e non da boot2docker, ecco la soluzione: usa l' docker_api_version: autoargomento

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

Immagino che il motivo sia che il modulo docker-py utilizzato da Ansible spesso non è della stessa versione del repository apt-get di Ubuntu.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.