【问题标题】:docker swarm init could not choose an IP address errordocker swarm init 无法选择 IP 地址错误
【发布时间】:2016-11-30 20:53:33
【问题描述】:

使用 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) 返回此错误:

来自守护程序的错误响应:无法选择 IP 地址 广告因为这个系统有多个地址

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

【问题讨论】:

    标签: docker docker-swarm docker-machine docker-for-mac docker-desktop


    【解决方案1】:

    首先在你的网络上寻找你机器的公网IP

    ifconfig
    

    选择物理地址,例如 192.168.1.x(不是 docker0,这是 Docker 内部的虚拟 IP)

    docker swarm init --advertise-addr 192.1.68.1.x
    

    (将默认为端口 2377)

    【讨论】:

      【解决方案2】:

      2017-05-24 更新:

      之前的答案是针对早期的集群模式。 secret 和 auto-accept 选项已被删除,并添加了 Advertisement-addr 选项。现在可以通过以下方式完成:

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

      端口将默认为 2377。您也可以使用网络接口名称代替 IP 地址,swarm 将在该接口上查找 IP 地址。侦听器地址仍然是一个选项,但默认是侦听所有接口,这通常是首选解决方案。


      原答案:

      我还没有用 docker-machine 做这个,但我知道新的 swarm 对 /etc/hosts 中的条目非常敏感。确保您的 ip 和主机名在该文件中,并且仅在一个位置(未映射到环回或任何其他内部地址)。从 RC3 开始,他们也将侦听器地址用于广告地址,因此请确保集群中的所有节点都可以引用此主机名或 ip(如果还没有的话,可以肯定会对此进行修复)。

      为了最大程度地降低客户端和服务器版本之间出现问题的风险,我还直接在 virtualbox 内运行命令,而不是使用 docker-machine 环境变量。

      【讨论】:

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

      根据 Docker 指南:https://docs.docker.com/get-started/part4/#create-a-cluster

      收到关于需要使用 --advertise-addr 的错误?

      通过运行 docker-machine 复制虚拟机的 IP 地址 ls,然后再次运行 docker swarm init 命令,使用该 IP 和 使用 --advertise-addr 指定端口 2377(群连接的端口)。 例如:

      docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"

      【讨论】:

      • 这正是启动 $ docker swarm init --advertise-addr 192.168.99.100:2377 所必需的,谢谢!我有 Docker 版本 17.05.0-ce-rc1,构建 2878a85
      【解决方案4】:

      使用 docker 和 envs 连接到 docker-machine-created 机器时遇到同样的错误。 在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
      【解决方案5】:

      这对我有用

      docker swarm init --advertise-addr 127.0.0.1
      

      【讨论】:

        【解决方案6】:

        检查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.12-rc4 没有 --advertise-addr 标志。它仅适用于 1.12-rc5。
        【解决方案7】:

        请 ssh 进入节点 1,然后在那里应用相同的命令

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 2022-06-20
        • 1970-01-01
        • 1970-01-01
        • 2018-09-08
        • 2017-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多