Помилка Docker: клієнт і сервер не мають однакової версії


84

Оскільки я щойно оновив Docker до 1.1.0, я отримую:

Відповідь помилки від демона: клієнт і сервер не мають однакової версії (клієнт: 1.13, сервер: 1.12)

Чи знаєте ви, як це виправити?

Я повернувся до 1.0.1 і все знову працює.


У мене така сама проблема, з використанням boot2docker. Це теж ваш випадок?
сигмус

2
так, я також використовую boot2docker. після видалення докера та встановлення його знову (а не `` перевстановлення '') знову працює. brew uninstall docker && brew install
docker

4
Можливо, вам слід відредагувати заголовок / запитання, щоб було зрозуміло, що це boot2dockerпроблема (для подальшого використання).
сигмус

Безсоромна вилка: ми з другом створили інструмент під назвою Docker Version Manager, який допоможе в цьому короткостроково.
Kyle Kelley

Відповіді:


127

Схоже, вам потрібно оновити віртуальну машину після встановлення boot2docker:

якщо ви оновлюєтеся з boot2docker 0.12 або пізнішої версії, ви можете оновити свою існуючу віртуальну машину (після оновлення за допомогою інсталятора), використовуючи boot2docker stop && boot2docker download && boot2docker up - і ви не втратите наявні дані.

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


3
також заварити видалення докера && brew install docker зробив роботу
soenke

5
Вам більше не потрібно використовувати заварювану версію інструмента командного рядка docker. Boot2Docker надає правильну версію.
Абель Муйньо

Маючи 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: /
Айн Товрі,

1
Я також зіткнувся з цим випуском сертифіката. boot2docker deleteТоді я побіг , boot2docker initі це почало працювати.
Дін Вамплер

1
Ми з другом створили інструмент під назвою Docker Version Manager, який допоможе в цьому короткостроково.
Kyle Kelley

19

Це може статися, якщо ви оновили Docker, але послугу не перезапустили. Потім ви спробуєте підключитися до демона Docker за допомогою оновленого клієнта, тоді як демон (який вже працював до оновлення) все ще запускає стару версію.

Щоб виправити це, перезапустіть службу:

inys sysV:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker


1
Адже systemdце рекомендується робити systemctl daemon-reloadдоsystemctl restart docker
лисини

Здається, найпростіша відповідь - найкраща відповідь :)
Даріс

13

Якщо ви використовуєте docker-machineдля управління локальними машинами на базі VirtualBox, рішення є таким же простим, як для boot2docker:

docker-machine upgrade MACHINE_NAME

Він просить docker-machineзавантажити останню версію boot2docker.isoта розмістити її як нову кореневу файлову систему в оновленій ВМ.

До речі, докер-машина з підтримкою VirtualBox має свою кореневу файлову систему лише для читання. Це означає, що жодне оновлення вручну не переживе перезавантаження машини. Для мене це було несподіванкою.


12

Я мав останню версію boot2docker, docker та віртуальну скриньку, але все ще отримував це повідомлення. Здається, біг brew upgrade boot2docker- не найкраща ідея. Під час запуску boot2docker upgradeмене попросили встановити купу змінних середовища, і тоді це спрацювало для мене.

Boot2docker попросив мене встановити їх (див. Останні рядки):

$ 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

Ці три рядки можна вирізати та вставити за один раз у ваш термінал.

Щоб перевірити їх правильність:

$ env

11

Я намагався запитати сервер Docker у недавнього клієнта:

  • Версія API сервера: 1.21
  • Клієнтський API версії 1.22

Рішенням для мене було просто:

export DOCKER_API_VERSION=1.21

Посилання: https://docs.docker.com/engine/reference/commandline/cli/


1
Дякую! це
вирішило

1
Той факт, що протокол докера має версії та сумісний із зворотною стороною, не повинен бути добре задокументованим або достатньо видимим, враховуючи кількість відповідей, які (зрозуміло) мають різну тривалість для оновлення докера в різних сценаріях ...
Марчелло Романі

3

Правильна відповідь тут дуже стара (Docker перейменував boot2docker на Docker Machine і додав до нього ще деякі функціональні можливості) .

У будь-якому випадку я зіткнувся з тією ж проблемою і зайняв близько 3 днів, щоб виправити :(

Ось рішення

1) знайти місце розташування boot2docker.iso

sudo find ~/ -name 'boot2docker.iso'

2) видалити boot2docker.isoфайл, зробивши резервну копію

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

3) видалити ваш докер vm

docker-machine rm {default}

це повинно видалити і це:

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

4) створити новий докер vm

docker-machine create --driver virtualbox default

це boot2docker.isoспочатку завантажить новий, а потім використає його для створення вашої vm.

Тепер це має виправити :)

АЛЕ

Якщо ви отримуєте будь-яку помилку тут, наприклад:

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"

спробуйте завантажити boot2docker.isoфайл вручну, перейшовши на https://api.github.com/repos/boot2docker/boot2docker/releases/latest, потім клацнувши на html_urlі нарешті вибравши файл для завантаження.

як тільки ви отримаєте файл, перейдіть і помістіть його вручну в /Users/{user}/.docker/machine/cache/

нарешті, повторно запустіть цю команду docker-machine create --driver virtualbox default


2

Єдине, що мені вдалося, - це вбити процес і запустити його з "запуску служби sudo service docker".


2

Єдине, що в мене спрацювало, було видалення образу boot2docker з VirtualBox, потім повне видалення ~/.boot2dockerпапки і, нарешті, запуск boot2docker initзнову.


1

boot2docker видалити

boot2docker init

працював у мене. Звичайно, зупиніть / запустіть Дімон до і після цього.


1

Це спрацювало для мене: він просто вимикає віртуальну машину, видаляє та відтворює її та запускає знову. Він повторно запускає shellinit, щоб ваші змінні ENV встановлювали правильну IP-адресу, коли вона повертається.

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

0

Я мав останню версію boot2docker (v1.7.1) і отримав помилку невідповідності клієнтського сервера. Потім я просто побіг, boot2docker upgradeі це вирішило проблему.


0

Моє рішення полягало в тому, щоб виконати Close> Power Off на віртуальній машині докера у VirtualBox, а потім перезапустити Kitematic. Це мені це виправило.


0

Я вважаю, що версія brew застаріла порівняно з версією на сайті docker.io. Тому я думаю, що найкращим способом є перейти на веб-сайт і завантажити інсталяційний файл.


0

Відповідальна відповідь:

Якщо ви прийшли туди за допомогою Ansible, а не boot2docker, ось рішення: Використовуйте docker_api_version: autoаргумент

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

Я думаю, причина в тому, що модуль docker-py, що використовується Ansible, часто не в тій самій версії, що і сховище apt-get Ubuntu.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.