Ошибка Docker: у клиента и сервера разные версии

84

Поскольку я только что обновил Docker до версии 1.1.0, я получаю:

Ответ об ошибке от демона: у клиента и сервера разные версии (клиент: 1.13, сервер: 1.12)

Вы знаете, как это исправить?

Я снова перешел на 1.0.1, и все снова работает.

Soenke
источник
У меня такая же проблема с использованием boot2docker. Это тоже твой случай?
sigmus 05
2
да, я тоже использую boot2docker. после удаления докера и его повторной установки (а не «переустановки») он снова работает. brew uninstall docker && brew install docker
soenke 06
4
Возможно, вам следует отредактировать заголовок / вопрос, чтобы прояснить, что это boot2dockerпроблема (для справки в будущем).
sigmus 06
Бесстыдный плагин: мы с другом создали инструмент под названием Docker Version Manager, чтобы помочь с этим в краткосрочной перспективе.
Кайл Келли

Ответы:

127

Похоже, вам нужно обновить виртуальную машину после установки boot2docker:

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

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

Абель Муиньо
источник
3
также brew uninstall docker && brew install docker выполнил свою работу
soenke
5
Вам больше не нужно использовать версию brew инструмента командной строки docker. Boot2Docker предоставляет правильную версию.
Abel Muiño 06
Имея 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и все заработало.
Dean Wampler,
1
Мы с другом создали инструмент под названием Docker Version Manager, чтобы помочь с этим в краткосрочной перспективе.
Кайл Келли
19

Это может произойти, если вы обновили Docker, но служба не была перезапущена. Затем вы попытаетесь подключиться к демону Docker с обновленным клиентом, в то время как демон (который уже работал до обновления) все еще работает с более старой версией.

Чтобы исправить это, перезапустите службу:

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker

БакаКуна
источник
1
Ибо systemdэто рекомендуется делать systemctl daemon-reloadраньшеsystemctl restart docker
лысины 03
Кажется, самый простой ответ - лучший ответ :)
Дарисс
13

Если вы используете docker-machineдля управления локальными машинами на основе VirtualBox, решение такое же простое, как и для boot2docker:

docker-machine upgrade MACHINE_NAME

Он просит docker-machineзагрузить последнюю версию boot2docker.isoи поместить ее в качестве новой корневой файловой системы в обновленную виртуальную машину.

Кстати, у док-машины с поддержкой VirtualBox есть корневая файловая система только для чтения. Это означает, что никакое ручное обновление невозможно пережить после перезагрузки компьютера. Для меня это было сюрпризом.

Питер
источник
12

У меня была последняя версия boot2docker, docker и virtual box, но я все еще получал это сообщение. Кажется, бег 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) удалите свой docker vm

docker-machine rm {default}

это также должно удалить это:

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

4) создать новый docker 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 start».

собачка
источник
2

Единственное, что у меня сработало, - это удалить образ boot2docker из VirtualBox, затем полностью удалить ~/.boot2dockerпапку и, наконец, boot2docker initснова запустить .

Dkinzer
источник
1

boot2docker удалить

boot2docker init

работал у меня. остановить / запустить демона до и после этого, конечно.

apflieger
источник
1

Это сработало для меня: он просто выключает виртуальную машину, удаляет и воссоздает ее, а затем снова запускает. Он повторно запускает shellinit, чтобы ваши переменные ENV получали правильный IP-адрес, когда он возвращается.

$ boot2docker poweroff && \
    boot2docker delete && \
    boot2docker init && \
    boot2docker up
$ eval `boot2docker shellinit`
0xADADA
источник
0

У меня была последняя версия boot2docker (v1.7.1), и я получил ошибку несоответствия клиентского сервера. Затем я просто побежал, boot2docker upgradeи проблема была решена.

Самита
источник
0

Мое решение заключалось в том, чтобы выполнить Close> Power Off на виртуальной машине Docker в 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, часто не той же версии, что и репозиторий Ubuntu apt-get.

Николас Зозол
источник