2016-06-03 4 views
3

Da ich mit docker und docker-machine viel arbeite, muss ich mit mehreren docker-Versionen gleichzeitig arbeiten. Und wir alle wissen, wie schwer das sein kann:mehrere Docker-Clients auf demselben Rechner

$ docker ps 
Error response from daemon: client is newer than server (client API version: 1.23, server API version: 1.22) 

Also, meine Frage: (Wie) ist es möglich, mehrere Versionen von Docker-Client auf meinem Ubuntu 16.04 laufen? Idealerweise würde es automatisch die richtige Version auswählen, sobald ich einen Host mit docker-machine betrete.

Randnotiz: Ich weiß, wie Sie den Client oder den Server aktualisieren. Aber ich muss immer noch mit verschiedenen Versionen arbeiten.

+0

Aber die Docker-Client-und Server-API-Version muss übereinstimmen, was ist der Punkt in der Ausführung mehrerer Client-Versionen. Natürlich können Sie die Client-Version erzwingen, indem Sie 'export DOCKER_API_VERSION = 1.22' setzen. Aber ich verstehe nicht, welche Flexibilität Sie wünschen – Shibashis

+0

Sie können immer mehrere [Docker Bild] (https://hub.docker.com/_/docker/) der Versionen, die Sie wünschen. Wenn die Container auch auf den Host-Datenträger zugreifen müssen, können Sie sie mit dem Schalter '-v' (Mount) ausführen. – yonisha

Antwort

1

fand ich eine Lösung für mich:

mkdir /opt/docker && cd /opt/docker 
wget https://get.docker.com/builds/Linux/i386/docker-1.11.2.tgz 
wget https://get.docker.com/builds/Linux/i386/docker-1.11.0.tgz 
wget https://get.docker.com/builds/Linux/i386/docker-1.10.0.tgz # versions you want 
tar -xzf docker-1.11.2.tgz -C 1.11.2 
tar -xzf docker-1.11.0.tgz -C 1.11.0 
tar -xzf docker-1.10.0.tgz -C 1.10.0 

hinzufügen, so etwas zu Ihrem .bashrc

PATH_DOCKER=$PATH 
dmenter() { 
    case $1 in 
    swarm) 
     eval $(dm env --swarm swarm) 
     VERSION=$(docker-machine version swarm) 
     export PATH=/opt/docker/$VERSION/usr/local/bin:$PATH_DOCKER 
     ;; 
    "") 
     eval $(docker-machine env --unset) 
     export PATH=$PATH_DOCKER 
     ;; 
    *) 
     eval $(docker-machine env $*) 
     VERSION=$(docker-machine version $*) 
     export PATH=/opt/docker/$VERSION/usr/local/bin:$PATH_DOCKER 
     ;; 
    esac 
} 

Jetzt können Sie Ihre Docker mit dmenter <host> und immer die passenden Client-Version verfügbar eingeben.