Docker Swarm初始化时无法选择IP地址错误。

25

使用Docker Desktop for Mac实验Docker Swarm。我尝试了以下内容:

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

执行最后一个命令(docker swarm init)返回以下错误:

Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses

我不知道发生了什么。有人知道如何进行调试吗?

7个回答

27

首先查找您机器在网络上的公共IP地址

ifconfig

选择类似于192.168.1.x这样的物理IP(不要选择docker0,那是Docker内部的虚拟IP)。

docker swarm init --advertise-addr 192.1.68.1.x

(默认使用端口2377)


24

更新 2017-05-24:

之前的答案是针对早期Swarm模式的。现在已经删除了秘密和自动接受选项,并添加了 advertise-addr 选项。现在可以使用以下命令来完成:

docker swarm init \
  --advertise-addr $(docker-machine ip node-1)

端口将默认为2377。您还可以使用网络接口名称而不是IP地址,swarm将在该接口上查找IP地址。仍然可以选择侦听器地址,但默认情况下会监听所有接口,这通常是首选解决方案。


Original answer:

我还没有使用docker-machine进行过这样的操作,但我知道新的swarm对/etc/hosts文件中的条目非常敏感。确保您的IP和主机名在该文件中只出现一次(不要映射到环回或任何其他内部地址)。从RC3开始,他们也将使用侦听器地址作为广告地址,因此请确保所有节点都可以引用该主机名或IP地址(如果还没有来的话,我相信一个修复程序正在到来)。

为了最大程度地减少客户端和服务器版本之间出现问题的风险,我建议直接在虚拟机中运行命令,而不是使用docker-machine环境变量。


我不知道发生了什么,但是错误现在说:守护进程的错误响应:无法选择要广告的IP地址,因为该系统有多个地址-使用--advertise-addr指定一个。所以我添加了--advertise-addr,将其设置为与--listen--addr标志相同,即$(docker-machine ip node-1):2377。然后它起作用了。不知道--listen-addr或--advertise-addr之间的区别,并且--advertise-addr似乎不在他们这里的文档中:https://docs.docker.com/engine/reference/commandline/swarm_init/。 - Justin
3
很高兴看到advertise-addr被纳入RC4。使用--advertise-addr配置公共IP或主机名,然后只需执行--listen-addr 0.0.0.0:2377(假设这是您的端口)。 - BMitch
3
它起作用了 docker swarm init --advertise-addr X.X.X.X 在这里你应该提供你主机的IP地址。 - Onur Tuna

9
根据 Docker 的指南:https://docs.docker.com/get-started/part4/#create-a-cluster 遇到需要使用 --advertise-addr 的错误吗?
通过运行 docker-machine ls 命令复制你的虚拟机的 IP 地址,然后再次运行 docker swarm init 命令,并使用该 IP,同时指定端口 2377(swarm 加入的端口)并写明 --advertise-addr。例如:
docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"

2
这是开始的必要步骤:$ docker swarm init --advertise-addr 192.168.99.100:2377。谢谢!我的Docker版本是17.05.0-ce-rc1,构建版本为2878a85。 - vimal krishna

6

这对我很有效

docker swarm init --advertise-addr 127.0.0.1

enter image description here


5

当使用docker连接由docker-machine创建的机器时,如果使用envs,可能会遇到同样的错误。 在执行docker-machine ssh <machine-name>之后,在机器上本地执行docker swarm init,我也收到了关于--advertise-addr的消息。然后,执行本地命令docker swarm init --listen-addr 192.168.99.100:2377 --advertise-addr 192.168.99.100:2377就可以了。


不必手动输入您的 IP 地址,您可以执行以下命令:docker swarm init --listen-addr `hostname -I | awk '{print $1}'`:2377 --advertise-addr `hostname -I | awk '{print $1}'`:2377 - user27221
监听地址是用来做什么的? - Ciasto piekarz

1
检查 docker --version 并确保客户端和服务器版本相同。如果版本不同,请使用以下命令拉取与您机器上的docker客户端匹配的boot2docker版本:docker-machine create --driver virtualbox --virtualbox-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v1.12.0-rc4/boot2docker-experimental.iso manager1

1
我认为1.12-rc4版本没有--advertise-addr标志。它只在1.12-rc5版本中可用。 - srivats

-1
请通过ssh登录到节点1,然后在那里执行相同的命令。

目前你的回答写得不清楚。请编辑并添加更多细节以帮助其他人了解它是如何回答所提出的问题的。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接