Experimentieren mit Docker Swarm mit Docker Desktop für Mac. Ich habe es versucht:
docker-machine create -d virtualbox node-1
docker-machine create -d virtualbox node-2
docker-machine create -d virtualbox node-3
eval $(docker-machine env node-1)
docker swarm init \
--secret my-secret \
--auto-accept worker \
--listen-addr $(docker-machine ip node-1):2377
Der letzte Befehl (docker swarm init
) gibt diesen Fehler zurück:
Fehlerantwort vom Dämon: Es konnte keine IP-Adresse für die Ankündigung ausgewählt werden, da dieses System mehrere Adressen hat
Ich habe keine Ahnung, was los ist. Hat jemand eine Idee wie man debuggt?
pdate 24.05.2017:
Die vorherige Antwort betraf einen frühen Zustand des Schwarmmodus. Die Optionen secret und auto-accept wurden inzwischen entfernt und die Option advertise-addr wurde hinzugefügt. Dies kann nun erledigt werden mit:
docker swarm init \
--advertise-addr $(docker-machine ip node-1)
Der Standardport ist 2377. Sie können auch einen Netzwerkschnittstellennamen anstelle einer IP-Adresse verwenden, und swarm sucht nach der IP-Adresse für diese Schnittstelle. Die Listener-Adresse ist weiterhin eine Option, standardmäßig werden jedoch alle Schnittstellen überwacht. Dies ist normalerweise die bevorzugte Lösung.
rsprüngliche Antwort:
Ich habe das mit docker-machine noch nicht gemacht, aber ich weiß, dass der neue Schwarm sehr empfindlich auf die Einträge in/etc/hosts reagiert. Stellen Sie sicher, dass sich Ihre IP-Adresse und Ihr Hostname in dieser Datei befinden und nur an einer einzigen Stelle (nicht auch Loopback- oder anderen internen Adressen zugeordnet). Ab RC3 verwenden sie auch die Listener-Adresse für die Werbeadresse, stellen Sie also sicher, dass dieser Hostname oder diese IP von allen Knoten im Schwarm referenziert werden kann (ziemlich sicher, dass ein Fix dafür kommt, falls nicht bereits vorhanden).
Um das Risiko von Problemen zwischen Client- und Serverversionen zu minimieren, führe ich die Befehle auch direkt in der Virtualbox aus und nicht mit Docker-Maschinen-Umgebungsvariablen.
Suchen Sie zunächst in Ihrem Netzwerk nach der öffentlichen IP-Adresse Ihres Computers
ifconfig
wähle die physische wie 192.168.1.x (nicht docker0, das ist eine virtuelle interne IP für Docker)
docker swarm init --advertise-addr 192.1.68.1.x
(wird standardmäßig auf Port 2377 gesetzt)
Laut Docker´s Guide: https://docs.docker.com/get-started/part4/#create-a-cluster
Erhalten Sie eine Fehlermeldung über die Verwendung von --advertise-addr?
Kopieren Sie die IP-Adresse für Ihre virtuelle Maschine, indem Sie docker-machine ls ausführen, und führen Sie dann den Docker-Befehl swarm init erneut aus. Verwenden Sie dabei diese IP-Adresse und geben Sie Port 2377 (den Port für Swarm-Joins) mit --advertise-addr an. Beispielsweise:
andockmaschine ssh myvm1 "Andockschwarm init --advertise-addr 192.168.99.100:2377"
Beim Verwenden von Docker mit envs zum Herstellen einer Verbindung mit dem vom Docker erstellten Computer wurde der gleiche Fehler gemeldet. Nach docker-machine ssh <machine-name>
und mache das docker swarm init
lokal auf der Maschine habe ich auch die Nachricht über --advertise-addr erhalten. Der lokale Befehl docker swarm init --listen-addr 192.168.99.100:2377 --advertise-addr 192.168.99.100:2377
dann hat es funktioniert.
Prüfen docker --version
und stellen Sie sicher, dass Client und Server auf derselben Version sind. Wenn sie unterschiedlich sind, verwenden Sie den folgenden Befehl, um die boot2docker-Version abzurufen, die mit dem Docker-Client auf Ihrem Computer übereinstimmt.
docker-machine create --driver virtualbox --virtualbox-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v1.12.0-rc4/boot2docker-experimental.iso manager1