web-dev-qa-db-fra.com

docker swarm init n'a pas pu choisir une erreur d'adresse IP

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?

18
Justin

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.

19
BMitch

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)

15
Genovo

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"

7
Jesus Almaral

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é.

5
user2389922

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

1
srivats