2016-07-29 36 views
3

Ich habe ein Problem mit der Bereitstellung von lokalen Virtualbox-basierten Schwarm - Ich habe die Anweisungen in der offiziellen Docker-Dokumentation zum Einrichten Master/Worker-Knoten mit der Docker-Werkzeugmaschine folgen. Ich habe den Token auf dockerhub erstellt und --swarm (und --warm-master) mit --swarm-discovery token: // XXXX ... so weit, so gut, zwei Maschinen ausgeführt, scheinbar als der Swarm-Master und Arbeiter:Probleme mit Docker-Maschine zum Einrichten von Swarm

[email protected]:~$ docker-machine ls 
NAME   ACTIVE  DRIVER  STATE  URL       SWARM     DOCKER ERRORS 
swarm-master * (swarm) virtualbox Running tcp://192.168.99.100:2376 swarm-master (master) v1.12.0 
swarm-node1 -   virtualbox Running tcp://192.168.99.101:2376 swarm-master   v1.12.0 
[email protected]:~$ docker run --rm swarm list token://[....] 
192.168.99.101:2376 
192.168.99.100:2376 

und nach den richtigen Umgebungswert Einstellung des „eval $ (docker-Maschine env --swarm Schwarm-Master)“ verwenden kann ich Status der „docker info“ mit Angabe, dass ich zwei Knoten running ... aber jeder Versuch, andere docker Schwarm Befehle (docker Knoten ..., Docker Service ...) zu laufen bekomme ich "Fehler Antwort von Daemon: 404 Seite nicht gefunden".

Was mache ich falsch?

Antwort

8

Es scheint, dass Sie versuchen, die neuen swarm mode Funktionen gegen die älteren docker swarm zu verwenden.

Das folgende Skript erstellt einen HA-Cluster Swarm mit 3 Manager und zwei Arbeiter (mit Docker 1.12.0):

#========================= 
# Creating cluster members 
#========================= 
docker-machine create --driver virtualbox node1 
docker-machine create --driver virtualbox node2 
docker-machine create --driver virtualbox node3 
docker-machine create --driver virtualbox node4 
docker-machine create --driver virtualbox node5 

#=============== 
# Starting swarm 
#=============== 
MANAGER_IP=$(docker-machine ip node1) 

docker-machine ssh node1 docker swarm init --advertise-addr $MANAGER_IP 

#=============== 
# Adding members 
#=============== 
MANAGER_TOKEN=$(docker-machine ssh node1 docker swarm join-token --quiet manager) 
WORKER_TOKEN=$(docker-machine ssh node1 docker swarm join-token --quiet worker) 

docker-machine ssh node2 docker swarm join --token $MANAGER_TOKEN $MANAGER_IP:2377 
docker-machine ssh node3 docker swarm join --token $MANAGER_TOKEN $MANAGER_IP:2377 
docker-machine ssh node4 docker swarm join --token $WORKER_TOKEN $MANAGER_IP:2377 
docker-machine ssh node5 docker swarm join --token $WORKER_TOKEN $MANAGER_IP:2377 

Liste der Schwarm Mitglieder

$ docker-machine ssh node1 docker node ls 
ID       HOSTNAME STATUS AVAILABILITY MANAGER STATUS 
4s0mrh2u4sa2p260ung8ipb0m * node1  Ready Active  Leader 
5ra7b8cwarpcpa47p2gq2ecxs node2  Ready Active  Reachable 
66t3pq66ynlvyl3do6lpn9kzb node3  Ready Active   
7k5n1id2q6yncqjbv7l8ec0r5 node5  Ready Active   
833e4ya58hq62epplreyvwtnm node4  Ready Active 

Erstellen eines Service

$ docker-machine ssh node1 docker service create --name web --replicas=10 -p 30000:80 nginx 

$ docker-machine ssh node1 docker service ps web 
ID       NAME IMAGE NODE DESIRED STATE CURRENT STATE   ERROR 
2fxy4n57p8ot3mn0kws96pnuk web.1 nginx node1 Running  Running 30 seconds ago 
cmm1s3h8ds7tmppf7pwvl5zxw web.2 nginx node5 Running  Running 6 seconds ago 
7ixgtqlz049ggi90363js088b web.3 nginx node1 Running  Running 30 seconds ago 
4o1e2wkh0x4rp8h9o73as8drf web.4 nginx node3 Running  Running 22 seconds ago 
6lufnzzddljlw0lnu0qyftzh6 web.5 nginx node3 Running  Running 22 seconds ago 
49g43g23t4r9lpmitfs4uu1j6 web.6 nginx node2 Running  Running 3 seconds ago 
43dopngi08licw4xttipnfdb6 web.7 nginx node2 Running  Running 3 seconds ago 
8d47dvmokf65xb271fyk3jlbu web.8 nginx node4 Running  Running 7 seconds ago 
2t56edm3k4x98yjkvgamyq6v4 web.9 nginx node5 Running  Running 6 seconds ago 
byij5j5pom1t3elu2ydteasg7 web.10 nginx node4 Running  Running 7 seconds ago 
+0

Aha ... naja, ich kann es so skripten (oder mache den Schwarm init/join Schritte manuell), aber ich dachte, dass die Docker-Maschine --warsm * Gruppe von Optionen sollte den Schwarm für mich automatisch festlegen, zumindest die docker-machine docs machen es so aussehen ... so sind diese eigentlich unbrauchbar mit der neuen Docker-Engine 1.12 zu arbeiten? –

+0

@ JiříNovák Docker Schwarm wurde in der Version 1.12 in die Docker-Engine integriert. Dies soll den älteren Swarm ersetzen, der als Container lief. Die Schwarmoptionen in der Docker-Maschine sollten den älteren Schwarm einfacher bedienen. Man kann sie immer noch verwenden, aber dann können Sie nicht erwarten, dass die neuen Befehle der Docker-Engine wie "docker node" oder "docker service" funktionieren. –

+0

@ mark-oconnor rechts, ich wurde durch die zwei Versionen von Schwarm verwirrt, fand ich es durch einige weitere Suchen und Lesen, nachdem ich einige Stunden Schlaf hatte :) Danke für die Klarstellung ... –