Błąd platformy Docker: klient i serwer nie mają tej samej wersji

84

Ponieważ właśnie zaktualizowałem Dockera do wersji 1.1.0, otrzymuję:

Odpowiedź na błąd od demona: klient i serwer nie mają tej samej wersji (klient: 1.13, serwer: 1.12)

Czy wiesz, jak to naprawić?

Wróciłem do 1.0.1 i wszystko znowu działa.

soenke
źródło
Mam ten sam problem, używając boot2docker. Czy to również twoja sprawa?
sigmus
2
tak, używam również boot2dockera. po odinstalowaniu Dockera i ponownym zainstalowaniu go (nie „ponownej instalacji”) ponownie działa. brew uninstall docker && brew install
docker
4
Może powinieneś edytować tytuł / pytanie, aby było jasne, że jest to boot2dockerproblem (do wykorzystania w przyszłości).
sigmus
Bezwstydna wtyczka: razem z przyjacielem stworzyliśmy narzędzie o nazwie Docker Version Manager, które ma w tym pomóc w krótkim okresie.
Kyle Kelley

Odpowiedzi:

127

Wygląda na to, że po zainstalowaniu boot2dockera musisz zaktualizować maszynę wirtualną:

Jeśli aktualizujesz z boot2docker 0.12 lub nowszego, możesz zaktualizować istniejącą maszynę wirtualną (po aktualizacji za pomocą instalatora) za pomocą boot2docker stop && boot2docker download && boot2docker up - i nie stracisz istniejących danych.

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

Abel Muiño
źródło
3
także brew uninstall docker && brew install docker wykonał zadanie
soenke
5
Nie musisz już używać wersji brew narzędzia wiersza poleceń Dockera. Boot2Docker zapewnia odpowiednią wersję.
Abel Muiño
Mając 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
Natknąłem się też na ten problem z certyfikatem. Pobiegłem boot2docker deletewtedy boot2docker initi zaczęło działać.
Dean Wampler
1
Razem z przyjacielem stworzyliśmy narzędzie o nazwie Docker Version Manager, aby pomóc w tym krótkoterminowo.
Kyle Kelley
19

Może się tak zdarzyć, jeśli zaktualizowałeś Docker, ale usługa nie została ponownie uruchomiona. Następnie spróbujesz połączyć się z demonem Docker ze zaktualizowanym klientem, podczas gdy demon (który był już uruchomiony przed aktualizacją) nadal działa w starszej wersji.

Aby to naprawić, uruchom ponownie usługę:

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker

BakaKuna
źródło
1
Dla systemdzaleca się zrobić systemctl daemon-reloadwcześniejsystemctl restart docker
baldrs
Wydaje się, że najprostsza odpowiedź jest najlepszą odpowiedzią :)
Dariss
13

Jeśli używasz docker-machinedo zarządzania lokalnymi maszynami opartymi na VirtualBox, rozwiązanie jest tak proste, jak w przypadku boot2docker:

docker-machine upgrade MACHINE_NAME

Prosi docker-machineo pobranie najnowszej wersji boot2docker.isoi umieszczenie jej jako nowego głównego systemu plików na zaktualizowanej maszynie wirtualnej.

Nawiasem mówiąc, maszyna dokowana wspierana przez VirtualBox ma swój główny system plików tylko do odczytu. Oznacza to, że żadna ręczna aktualizacja nie przetrwa ponownego uruchomienia komputera. To była dla mnie niespodzianka.

Piotr
źródło
12

Miałem najnowszą wersję boot2dockera, dockera i wirtualnego boxu, ale nadal otrzymywałem tę wiadomość. Wygląda na to, że bieganie brew upgrade boot2dockernie jest najlepszym pomysłem. Podczas uruchamiania boot2docker upgradezostałem poproszony o ustawienie kilku zmiennych środowiskowych i wtedy zadziałało.

Boot2docker poprosił mnie o ustawienie tych (zobacz ostatnie wiersze):

$ 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

Możliwe jest wycięcie i wklejenie tych trzech linii za jednym razem do terminala.

Aby sprawdzić, czy są poprawne:

$ env
Rimian
źródło
11

Próbowałem wysłać zapytanie do serwera Docker za pomocą nowszego klienta:

  • Wersja interfejsu API serwera: 1.21.0
  • Client API w wersji 1.22

Rozwiązaniem dla mnie było po prostu:

export DOCKER_API_VERSION=1.21

Źródła: https://docs.docker.com/engine/reference/commandline/cli/

Marcello Romani
źródło
1
Dzięki! to rozwiązało mój problem
MajiK
1
Fakt, że protokół dockera jest wersjonowany i zgodny z poprzednimi wersjami, nie może być dobrze udokumentowany ani dostatecznie widoczny, biorąc pod uwagę ilość odpowiedzi, które (co zrozumiałe) idą w różny sposób, aby zaktualizować docker w różnych scenariuszach ...
Marcello Romani
3

Prawidłowa odpowiedź jest tutaj bardzo stara (Docker zmienił nazwę boot2docker na Docker Machine i dodał do niego więcej funkcji) .

W każdym razie napotkałem ten sam problem i zajęło mi około 3 dni, aby naprawić :(

Oto rozwiązanie

1) znajdź lokalizację pliku boot2docker.iso

sudo find ~/ -name 'boot2docker.iso'

2) usunąć boot2docker.isoplik po wykonaniu jego kopii zapasowej

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

3) Usuń Docker VM

docker-machine rm {default}

powinno to również usunąć ten:

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

4) Utwórz nową maszynę docker vm

docker-machine create --driver virtualbox default

to najpierw pobierze nowy, boot2docker.isoa następnie użyje go do utworzenia maszyny wirtualnej.

Teraz powinno to naprawić :)

ALE

Jeśli pojawi się tutaj jakiś błąd, taki jak:

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"

spróbuj pobrać boot2docker.isoplik ręcznie, przechodząc do https://api.github.com/repos/boot2docker/boot2docker/releases/latest, a następnie klikając html_urli ostatecznie wybierając opcję pobrania pliku.

po otrzymaniu pliku idź i umieść go ręcznie w /Users/{user}/.docker/machine/cache/

na koniec ponownie uruchom to polecenie docker-machine create --driver virtualbox default

Mahmoud Zalt
źródło
2

Jedyną rzeczą, która działała dla mnie, było zabicie procesu i uruchomienie go za pomocą "sudo service docker start".

zapadka
źródło
2

Jedyną rzeczą, która działała dla mnie, było usunięcie obrazu boot2docker z VirtualBox, a następnie całkowite usunięcie ~/.boot2dockerfolderu i wreszcie ponowne uruchomienie boot2docker init.

dkinzer
źródło
1

usuwanie boot2docker

inicjalizacja boot2docker

pracował dla mnie. oczywiście zatrzymaj / uruchom demona przed i po tym.

apflieger
źródło
1

To zadziałało dla mnie: po prostu wyłącza maszynę wirtualną, usuwa i odtwarza ją i ponownie uruchamia. Ponownie uruchamia shellinit, dzięki czemu zmienne ENV zostaną ustawione z poprawnym adresem IP, gdy powróci.

$ boot2docker poweroff && \
    boot2docker delete && \
    boot2docker init && \
    boot2docker up
$ eval `boot2docker shellinit`
0xADADA
źródło
0

Miałem najnowszą wersję boot2docker (v1.7.1) i otrzymałem błąd niezgodności serwera klienta. Potem po prostu pobiegłem boot2docker upgradei to rozwiązało problem.

Samitha
źródło
0

Moim rozwiązaniem było wykonanie Zamknij> Wyłącz na maszynie wirtualnej dockera w VirtualBox, a następnie ponownie uruchom Kitematic. To naprawiło to dla mnie.

ourmaninamsterdam
źródło
0

Uważam, że wersja w brew jest nieaktualna w porównaniu z wersją na stronie docker.io. Dlatego myślę, że najlepiej jest wejść na stronę internetową i pobrać plik instalacyjny.

Tommy
źródło
0

Odpowiedź Ansible:

Jeśli trafiłeś tam przez Ansible, a nie przez boot2docker, oto rozwiązanie: użyj docker_api_version: autoargumentu

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

Myślę, że powodem jest to, że moduł docker-py używany przez Ansible często nie jest w tej samej wersji, co repozytorium Ubuntu apt-get.

Nicolas Zozol
źródło