Expérimentation avec Docker Swarm avec Docker Desktop pour Mac. J'ai essayé ceci:
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
La dernière commande (docker swarm init
) renvoie cette erreur:
Réponse d'erreur du démon: impossible de choisir une adresse IP à publier car ce système a plusieurs adresses
Je ne ai aucune idée de ce qui se passe. Quelqu'un a une idée de comment déboguer?
Mise à jour 2017-05-24:
La réponse précédente était pour un état précoce du mode essaim. Les options secrètes et d'acceptation automatique ont depuis été supprimées et l'option advertise-addr a été ajoutée. Cela peut maintenant être fait avec:
docker swarm init \
--advertise-addr $(docker-machine ip node-1)
Le port sera par défaut 2377. Vous pouvez également utiliser un nom d'interface réseau au lieu d'une adresse IP et swarm recherchera l'adresse IP sur cette interface. L'adresse d'écoute est toujours une option mais la valeur par défaut est d'écouter sur toutes les interfaces, ce qui est généralement la solution préférée.
Réponse originale:
Je ne l'ai pas encore fait avec docker-machine, mais je sais que le nouvel essaim est très sensible aux entrées dans/etc/hosts. Assurez-vous que votre adresse IP et votre nom d'hôte se trouvent dans ce fichier, et uniquement dans un seul endroit (pas également mappé sur le bouclage ou toute autre adresse interne). Depuis RC3, ils utilisent également l'adresse d'écoute pour l'adresse de publicité, alors assurez-vous que ce nom d'hôte ou cette adresse IP peut être référencé par tous les nœuds de l'essaim (assez sûr qu'un correctif est à venir pour cela, s'il n'est pas déjà ici).
Pour minimiser le risque de problèmes entre les versions client et serveur, j'exécuterais également les commandes directement à l'intérieur de la boîte virtuelle, plutôt qu'avec des variables d'environnement docker-machine.
Recherchez d'abord l'adresse IP publique de votre machine sur votre réseau
ifconfig
choisissez le physique comme 192.168.1.x (pas docker0, c'est une IP virtuelle interne à Docker)
docker swarm init --advertise-addr 192.1.68.1.x
(par défaut sur le port 2377)
Selon le guide de Docker: https://docs.docker.com/get-started/part4/#create-a-cluster
Obtenir une erreur sur la nécessité d'utiliser --advertise-addr?
Copiez l'adresse IP de votre machine virtuelle en exécutant docker-machine ls, puis réexécutez la commande docker swarm init, en utilisant cette IP et en spécifiant le port 2377 (le port pour les jointures en essaim) avec --advertise-addr. Par exemple:
docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
Vous obtenez la même erreur lorsque vous utilisez Docker avec Envs pour vous connecter à la machine créée par Docker-Machine. Après docker-machine ssh <machine-name>
, et faire le docker swarm init
localement sur la machine, j'ai aussi reçu le message sur --advertise-addr. La commande locale docker swarm init --listen-addr 192.168.99.100:2377 --advertise-addr 192.168.99.100:2377
a ensuite travaillé.
Vérifier docker --version
et assurez-vous que le client et le serveur sont sur la même version. S'ils sont différents, utilisez la commande suivante pour extraire la version boot2docker qui correspond au client docker sur votre ordinateur.
docker-machine create --driver virtualbox --virtualbox-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v1.12.0-rc4/boot2docker-experimental.iso manager1