Erreur Docker: le client et le serveur n'ont pas la même version

84

Depuis que je viens de mettre à jour Docker vers 1.1.0, j'obtiens:

Réponse d'erreur du démon: le client et le serveur n'ont pas la même version (client: 1.13, serveur: 1.12)

Savez-vous comment résoudre ce problème?

Je suis revenu à la version 1.0.1 et tout fonctionne à nouveau.

soenke
la source
J'ai le même problème, en utilisant boot2docker. Est-ce aussi votre cas?
sigmus
2
oui j'utilise aussi boot2docker. après avoir désinstallé docker et installé à nouveau (pas «réinstaller»), il fonctionne à nouveau. brew uninstall docker && brew install docker
soenke
4
Vous devriez peut-être modifier le titre / la question pour qu'il soit clair qu'il s'agit d'un boot2dockerproblème (pour référence future).
sigmus
Prise sans vergogne: un ami et moi avons mis au point un outil appelé Docker Version Manager pour vous aider à court terme.
Kyle Kelley du

Réponses:

127

Il semble que vous deviez mettre à niveau la VM après l'installation de boot2docker:

si vous effectuez une mise à niveau à partir de boot2docker 0.12 ou version ultérieure, vous pouvez mettre à jour votre machine virtuelle existante (après la mise à niveau à l'aide du programme d'installation) en utilisant boot2docker stop && boot2docker download && boot2docker up - et vous ne perdrez pas vos données existantes.

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

Abel Muiño
la source
3
aussi brasser désinstaller docker && brew installer docker a fait le travail
soenke
5
Vous n'avez plus besoin d'utiliser la version infusion de l'outil de ligne de commande docker. Boot2Docker fournit la bonne version.
Abel Muiño le
Ayant 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
J'ai aussi rencontré ce problème de certificat. J'ai couru boot2docker delete, puis boot2docker initet ça a commencé à marcher.
Dean Wampler
1
Un ami et moi avons mis au point un outil appelé Docker Version Manager pour vous aider à court terme.
Kyle Kelley du
19

Cela peut se produire si vous avez mis à jour Docker, mais que le service n'a pas été redémarré. Vous allez ensuite essayer de vous connecter au démon Docker avec le client mis à jour, tandis que le démon (qui était déjà en cours d'exécution avant la mise à jour) exécute toujours l'ancienne version.

Pour résoudre ce problème, redémarrez le service:

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker

BakaKuna
la source
1
Car systemdil est recommandé de le faire systemctl daemon-reloadavantsystemctl restart docker
baldrs
On dirait que la réponse la plus simple est la meilleure réponse :)
Dariss
13

Si vous utilisez docker-machinepour gérer des machines locales basées sur VirtualBox, la solution est aussi simple que pour boot2docker:

docker-machine upgrade MACHINE_NAME

Il demande docker-machinede télécharger la dernière version boot2docker.isoet de la placer en tant que nouveau système de fichiers racine dans la machine virtuelle mise à niveau.

À propos, la machine docker basée sur VirtualBox a son système de fichiers racine en lecture seule. Cela signifie qu'aucune mise à jour manuelle n'est possible après le redémarrage de la machine. Cela a été une surprise pour moi.

Peter
la source
12

J'avais la dernière version de boot2docker, docker et virtual box mais je recevais toujours ce message. Il semble que courir brew upgrade boot2dockern'est pas la meilleure idée. Lors de l'exécution boot2docker upgrade, on m'a demandé de définir un tas de variables d'environnement, puis cela a fonctionné pour moi.

Boot2docker m'a demandé de définir ceux-ci (voir les dernières lignes):

$ 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

Il est possible de couper et coller ces trois lignes en une seule fois, dans votre terminal.

Pour vérifier qu'ils sont corrects:

$ env
Rimian
la source
11

J'essayais d'interroger un serveur Docker avec un client plus récent:

  • Version de l'API serveur: 1.21
  • API client version 1.22

La solution pour moi était simplement de:

export DOCKER_API_VERSION=1.21

Référence: https://docs.docker.com/engine/reference/commandline/cli/

Marcello Romani
la source
1
Merci! cela a résolu mon problème
MajiK
1
Le fait que le protocole docker soit versionné et rétrocompatible ne doit pas être bien documenté, ni suffisamment visible, étant donné le nombre de réponses qui (naturellement) vont à toutes sortes de longueurs pour mettre à niveau docker dans divers scénarios ...
Marcello Romani
3

La bonne réponse ici est très ancienne (Docker a renommé boot2docker en Docker Machine et y a ajouté quelques fonctionnalités supplémentaires) .

Quoi qu'il en soit, j'ai rencontré le même problème et il m'a fallu environ 3 jours pour le réparer :(

Voici la solution

1) Trouvez l'emplacement du boot2docker.iso

sudo find ~/ -name 'boot2docker.iso'

2) supprimer le boot2docker.isofichier, après en avoir fait une sauvegarde

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

3) Supprimez votre docker vm

docker-machine rm {default}

cela devrait également supprimer celui-là:

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

4) Créer un nouveau docker vm

docker-machine create --driver virtualbox default

cela téléchargera un nouveau boot2docker.iso , puis l'utilisera pour créer votre VM.

Maintenant, cela devrait résoudre le problème :)

MAIS

Si vous obtenez une erreur ici comme:

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"

essayez de télécharger le boot2docker.isofichier manuellement en allant sur https://api.github.com/repos/boot2docker/boot2docker/releases/latest puis en cliquant sur html_urlet enfin en choisissant de télécharger le fichier.

une fois que vous avez obtenu le fichier, placez-le manuellement dans /Users/{user}/.docker/machine/cache/

enfin relancez cette commande docker-machine create --driver virtualbox default

Mahmoud Zalt
la source
2

La seule chose qui a fonctionné pour moi a été de tuer le processus et de le démarrer avec "sudo service docker start".

cliquet
la source
2

La seule chose qui a fonctionné pour moi a été de supprimer l'image boot2docker de VirtualBox, puis de supprimer complètement le ~/.boot2dockerdossier, et enfin de boot2docker initrecommencer.

Dkinzer
la source
1

suppression de boot2docker

boot2docker init

travaillé pour moi. arrêter / démarrer le démon avant et après cela bien sûr.

apflieger
la source
1

Cela a fonctionné pour moi: il arrête simplement la vm, la supprime et la recrée et la redémarre. Il réexécute shellinit pour que vos variables ENV soient définies avec la bonne adresse IP lors de sa remontée.

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

J'avais la dernière version de boot2docker (v1.7.1) et j'ai eu l'erreur de non-concordance client-serveur. Ensuite, j'ai couru boot2docker upgradeet cela a résolu le problème.

Samitha
la source
0

Ma solution était de faire un Fermer> Mettre hors tension sur la VM docker dans VirtualBox, puis redémarrer Kitematic. Cela a résolu le problème pour moi.

ourmaninamsterdam
la source
0

Je trouve que la version dans brew est obsolète par rapport à celle du site Web docker.io. Par conséquent, je pense que le meilleur moyen est d'aller sur le site Web et de télécharger le fichier d'installation.

Tommy
la source
0

Réponse Ansible:

Si vous y êtes venu par Ansible et non par boot2docker, voici la solution: Utilisez l' docker_api_version: autoargument

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

Je suppose que la raison en est que le module docker-py utilisé par Ansible n'est souvent pas à la même version que le référentiel Ubuntu apt-get.

Nicolas Zozol
la source