docker swarm init 无法选择 IP 地址错误
docker swarm init could not choose an IP address error
正在 Docker Swarm 和 Docker 桌面进行 Mac 的实验。我试过这个:
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
)returns这个错误:
Error response from daemon: could not choose an IP address to
advertise since this system has multiple addresses
我不知道发生了什么。有人知道如何调试吗?
2017-05-24更新:
先前的答案是针对集群模式的早期状态。 secret 和 auto-accept 选项已被删除,并添加了 advertise-addr 选项。现在可以通过以下方式完成:
docker swarm init \
--advertise-addr $(docker-machine ip node-1)
端口将默认为 2377。您也可以使用网络接口名称而不是 IP 地址,swarm 将在该接口上查找 IP 地址。侦听器地址仍然是一个选项,但默认设置是侦听所有接口,这通常是首选解决方案。
原回答:
我还没有用 docker-machine 做过这个,但我知道新的 swarm 对 /etc/hosts 中的条目非常敏感。确保您的 ip 和主机名在该文件中,并且只在一个地方(也没有映射到环回或任何其他内部地址)。从 RC3 开始,他们也将侦听器地址用于广告地址,因此请确保该主机名或 ip 可以被 swarm 中的所有节点引用(如果还没有的话,可以肯定的是修复即将到来)。
为了尽量减少客户端和服务器版本之间出现问题的风险,我还运行 直接在 virtualbox 中执行命令,而不是使用 docker 机器环境变量。
在使用 docker 和 envs 连接到 docker-machine 创建的机器时遇到同样的错误。
在 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
起作用了。
检查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
根据 Docker 的指南:https://docs.docker.com/get-started/part4/#create-a-cluster
Getting an error about needing to use --advertise-addr?
Copy the IP address for your virtual machine by running docker-machine
ls, then run the docker swarm init command again, using that IP and
specifying port 2377 (the port for swarm joins) with --advertise-addr.
For example:
docker-machine ssh myvm1 "docker swarm init --advertise-addr
192.168.99.100:2377"
首先在您的网络上查找您机器的 public IP
ifconfig
选择物理地址,例如 192.168。1.x(不是 docker0,它是 Docker 内部的虚拟 IP)
docker swarm init --advertise-addr 192.1.68.1.x
(将默认为端口 2377)
这对我有用
docker swarm init --advertise-addr 127.0.0.1
请通过 ssh 进入节点 1,然后在那里应用相同的命令
正在 Docker Swarm 和 Docker 桌面进行 Mac 的实验。我试过这个:
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
)returns这个错误:
Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses
我不知道发生了什么。有人知道如何调试吗?
2017-05-24更新:
先前的答案是针对集群模式的早期状态。 secret 和 auto-accept 选项已被删除,并添加了 advertise-addr 选项。现在可以通过以下方式完成:
docker swarm init \
--advertise-addr $(docker-machine ip node-1)
端口将默认为 2377。您也可以使用网络接口名称而不是 IP 地址,swarm 将在该接口上查找 IP 地址。侦听器地址仍然是一个选项,但默认设置是侦听所有接口,这通常是首选解决方案。
原回答:
我还没有用 docker-machine 做过这个,但我知道新的 swarm 对 /etc/hosts 中的条目非常敏感。确保您的 ip 和主机名在该文件中,并且只在一个地方(也没有映射到环回或任何其他内部地址)。从 RC3 开始,他们也将侦听器地址用于广告地址,因此请确保该主机名或 ip 可以被 swarm 中的所有节点引用(如果还没有的话,可以肯定的是修复即将到来)。
为了尽量减少客户端和服务器版本之间出现问题的风险,我还运行 直接在 virtualbox 中执行命令,而不是使用 docker 机器环境变量。
在使用 docker 和 envs 连接到 docker-machine 创建的机器时遇到同样的错误。
在 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
起作用了。
检查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
根据 Docker 的指南:https://docs.docker.com/get-started/part4/#create-a-cluster
Getting an error about needing to use --advertise-addr?
Copy the IP address for your virtual machine by running docker-machine ls, then run the docker swarm init command again, using that IP and specifying port 2377 (the port for swarm joins) with --advertise-addr. For example:
docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
首先在您的网络上查找您机器的 public IP
ifconfig
选择物理地址,例如 192.168。1.x(不是 docker0,它是 Docker 内部的虚拟 IP)
docker swarm init --advertise-addr 192.1.68.1.x
(将默认为端口 2377)
这对我有用
docker swarm init --advertise-addr 127.0.0.1
请通过 ssh 进入节点 1,然后在那里应用相同的命令