加入位于不同 Docker 容器中的 serf 节点时出现问题

2023-12-26

上下文:主机是 AWS-EC2 / Ubuntu 14.04.5,带有 Docker 版本 17.05.0-ce。容器是根据公开可用的存储库映像构建的cbhihe/serf-alpine-bash。所有容器都位于同一个 EC2 实例上,并与网络接口“docker0”共享相同的默认桥接网络。

尝试通过从主机的 shell 传递 cmd 来加入节点 serfDC1 (id d4fd90692e18) 和 serfDC2 (id 6353e7f6134d):

$ docker exec serfDC1 serf agent -node=Node1 -bind=0.0.0.0:7946
==> Starting Serf agent…
==> Starting Serf agent RPC...
==> Serf agent running!
         Node name: 'd4fd90692e18'
         Bind addr: '0.0.0.0:7946'
          RPC addr: '127.0.0.1:7373'
         Encrypted: false
          Snapshot: false
           Profile: lan
==> Log data will now stream in as it occurs:
    2017/06/04 00:01:10 [INFO] agent: Serf agent starting
    2017/06/04 00:01:10 [INFO] serf: EventMemberJoin: d4fd90692e18 127.0.0.1
    2017/06/04 00:01:11 [INFO] agent: Received event: member-join
    ^C

发现 Node1 容器的 IP=172.17.0.4 后,我可以发出serf agent -joincmd 到节点2:

$ docker exec serfDC2 serf agent -node=Node2 -join=172.17.0.4
==> Starting Serf agent...
==> Starting Serf agent RPC...
==> Serf agent running!
         Node name: '6353e7f6134d'
         Bind addr: '0.0.0.0:7946'
          RPC addr: '127.0.0.1:7373'
         Encrypted: false
          Snapshot: false
           Profile: lan
==> Joining cluster...(replay: false)
    Join completed. Synced with 1 initial agents
==> Log data will now stream in as it occurs:
    2017/06/04 00:18:35 [INFO] agent: Serf agent starting
    2017/06/04 00:18:35 [INFO] serf: EventMemberJoin: 6353e7f6134d 127.0.0.1
    2017/06/04 00:18:35 [INFO] agent: joining: [172.17.0.4] replay: false
    2017/06/04 00:18:35 [INFO] serf: EventMemberJoin: d4fd90692e18 127.0.0.1
    2017/06/04 00:18:35 [INFO] agent: joined: 1 nodes
    2017/06/04 00:18:36 [WARN] memberlist: Got ping for unexpected node 'd4fd90692e18' from=127.0.0.1:7946
    2017/06/04 00:18:36 [INFO] agent: Received event: member-join
    2017/06/04 00:18:37 [WARN] memberlist: Got ping for unexpected node d4fd90692e18 from=127.0.0.1:34876
    2017/06/04 00:18:37 [ERR] memberlist: Failed TCP fallback ping: EOF
    2017/06/04 00:18:37 [INFO] memberlist: Suspect d4fd90692e18 has failed, no acks received
    2017/06/04 00:18:38 [WARN] memberlist: Got ping for unexpected node 'd4fd90692e18' from=127.0.0.1:7946
    2017/06/04 00:18:39 [WARN] memberlist: Got ping for unexpected node d4fd90692e18 from=127.0.0.1:34879
    2017/06/04 00:18:39 [ERR] memberlist: Failed TCP fallback ping: EOF
    2017/06/04 00:18:40 [INFO] memberlist: Suspect d4fd90692e18 has failed, no acks received
    2017/06/04 00:18:41 [WARN] memberlist: Got ping for unexpected node 'd4fd90692e18' from=127.0.0.1:7946
    2017/06/04 00:18:42 [WARN] memberlist: Got ping for unexpected node d4fd90692e18 from=127.0.0.1:34881
    2017/06/04 00:18:42 [ERR] memberlist: Failed TCP fallback ping: EOF
    2017/06/04 00:18:42 [INFO] memberlist: Marking d4fd90692e18 as failed, suspect timeout reached (0 peer confirmations)
    2017/06/04 00:18:42 [INFO] serf: EventMemberFailed: d4fd90692e18 127.0.0.1
    2017/06/04 00:18:43 [INFO] agent: Received event: member-failed
    2017/06/04 00:18:44 [INFO] memberlist: Suspect d4fd90692e18 has failed, no acks received
    2017/06/04 00:19:05 [INFO] serf: attempting reconnect to d4fd90692e18 127.0.0.1:7946
   ^C

导致加入失败,如下所示:

$ docker exec serfDC2 serf members
6353e7f6134d  127.0.0.1:7946  alive
d4fd90692e18  127.0.0.1:7946  failed  
$ docker exec serfDC1 serf members
d4fd90692e18  127.0.0.1:7946  alive 
6353e7f6134d  127.0.0.1:7946  failed

我已经在这方面已经有一段时间了,但对于我应该转向哪里却束手无策。 Hashicorp 和 Docker 的文档似乎没有涵盖不同容器中的两个农奴代理之间初始握手的这一方面。

有人可以告诉我哪里走错了吗?任何答案都会很棒,真的。德克萨斯州。


Serf 节点需要用可路由的地址“宣告”自己。在你的情况下,他们互相告诉对方:“嗨,我是本地主机:...”,所以每个人都试图回答本地主机,这是错误的,因为每个容器都有自己的本地主机。

有一个选项可以配置代理以使用eth0ip 向网络中的其他节点通告:-iface。然后你需要丢弃-bind选项。这些端口是默认的,因此无需自定义。

因此,对于节点1:

serf agent -node=Node1 -iface=eth0

对于节点2:

serf agent -node=Node2 -join=172.17.0.2 -iface=eth0

From docs https://www.serf.io/docs/agent/options.html:

-iface - 该标志可用于提供绑定接口。如果接口已知但不知道地址,则可以使用它来代替 -bind。

它对我来说工作正常:

Node1:

==> Log data will now stream in as it occurs:

    2017/06/04 01:56:40 [INFO] agent: Serf agent starting
    2017/06/04 01:56:40 [INFO] serf: EventMemberJoin: Node1 172.17.0.2
    2017/06/04 01:56:41 [INFO] agent: Received event: member-join
    2017/06/04 01:57:02 [INFO] serf: EventMemberJoin: Node2 172.17.0.3
    2017/06/04 01:57:03 [INFO] agent: Received event: member-join

Node2:

==> Log data will now stream in as it occurs:

    2017/06/04 01:57:02 [INFO] agent: Serf agent starting
    2017/06/04 01:57:02 [INFO] serf: EventMemberJoin: Node2 172.17.0.3
    2017/06/04 01:57:02 [INFO] agent: joining: [172.17.0.2] replay: false
    2017/06/04 01:57:02 [INFO] serf: EventMemberJoin: Node1 172.17.0.2
    2017/06/04 01:57:02 [INFO] agent: joined: 1 nodes
    2017/06/04 01:57:03 [INFO] agent: Received event: member-join

Edit:

如果每个容器都在自己的VM(EC2实例)中,则由于每个实例都有自己的docker网络并且不互连,因此您必须提供EC2实例IP并公开相应的端口。使用-advertise https://www.serf.io/docs/agent/options.html#advertise

-advertise - 广告标志用于更改我们向集群中其他节点广告的地址。

Node1:

serf agent -node=Node1 -iface=eth0 -advertise=INSTANCE_IP

Node2:

serf agent -node=Node2 -join=NODE1_INSTANCE_IP -iface=eth0

并记住expose农奴口在docker run

docker run -p 7946:7946 (...rest of the command...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加入位于不同 Docker 容器中的 serf 节点时出现问题 的相关文章

  • 在新的 Apple Silicon 架构上运行 Ruby、Node、Python 和 Docker? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何获得在 Apple Silicon 架构上运行的 Ruby Python 和 Node js 开发环境 虚拟化软件怎么样 码头工人
  • Docker镜像删除后占用空间

    我提交了一个现有的 Docker 容器来创建新镜像 但提交的镜像太大了 原始镜像为 3 GB 并且在容器中安装了一些其他内容 提交的镜像为 8 GB 我的空间不足 所以我决定删除提交的映像 但即使删除提交的映像后 我的磁盘空间也没有增加 然
  • 如何在启动时添加 EC2 实例属性?

    我们使用 Amazon ECS 提供服务 我们有一个名为application在该集群中 我们有多项服务 dev app dev kafka dev zookeeper qa app qa kafka qa zookeeper etc 服务
  • ELB 是否用于出站流量?

    ELB 弹性负载均衡器 可用于通过向 ELB 分配公共 IP 来使一些计算实例 EC2 位于公共子网中 面向公众 面向互联网 客户端可以在其中与 ELB 通信 Case 1 公有子网中的 EC2 实例 只有私有 IP 通过 ELB 接收 h
  • 尝试使用 Paramiko 通过 SSH 连接到新的 EC2 实例时出现问题

    我正在编写一个脚本 该脚本使用 boto 启动一个新的 EC2 实例 并使用 Paramiko SSH 客户端在该实例上执行远程命令 无论出于何种原因 Paramiko 客户端无法连接 我收到错误 Traceback most recent
  • 在 Traefik 1.5.0-rc5 中使用新的 httpChallenge 时出现问题

    在尝试升级到最新的 traefik 版本以便能够从 LetsEncrypt 生成 TLS 证书时 我遇到了证书生成时间的问题 这之前工作过traefik 1 4使用acme ondemand标志和其他设置 减去httpChallenge当然
  • Windows 8.1可以安装Docker吗?

    我想使用 Docker 将带有 NET Core 3 1 的 Web 应用程序部署到 Heroku 我下载了它 然后告诉我应该使用 Windows 10 适用于 Windows 的 Docker 需要 Windows 10 如果您使用 Wi
  • AWS Fargate - 卷

    我的 docker compose 文件有问题 这是我的 docker 撰写文件 version 3 services nginx proxy image xxxxx dkr ecr xxxxx amazonaws com xxxx lat
  • 如何对 Xcode 进行 docker 化

    出于 CI 的目的 我需要建立一个能够构建 iOS 应用程序的构建从属集群 目前 我依赖于一台 MacMini 目标是在将来部署更多台 并且我想在其上虚拟化多个从属设备 其中一些虚拟从站将构建 iOS 应用程序 其他虚拟从站将是用于各种目的
  • 不使用特定标签 KeyValue 时显式拒绝用户在 AWS 中运行实例

    我创建了一个策略 允许用户执行所有 ec2 操作 但限制用户仅在通过显式拒绝传递给定标签键值对时才能运行实例和创建卷并终止实例 ec2完全权限策略 Version 2012 10 17 Statement Sid VisualEditor0
  • Spring boot JDBC无法连接docker容器中的mysql

    我正在尝试在两个单独的 docker 容器中运行 spring boot 应用程序 作为简单的 REST api 和 mysql 服务器 但是 我无法在 Spring 应用程序中获取 jdbc 连接来连接 mysql 它们都是独立工作的 当
  • 确定 docker 镜像的操作系统分布

    我需要确定任何 docker 映像的操作系统发行版名称 我可以标记ubuntu 最新 as 图片1 最新 但我应该能够在启动时获取 image1 latest 的分发信息 为了实现这一点 我使用下面提到的命令来确定操作系统版本 docker
  • 是否可以显示正在运行的 Docker 容器的重启策略?

    当我创建容器时 我指定了重新启动策略 但这没有显示在docker ps 并且似乎也没有任何格式字符串显示这一点 有谁知道如何查看正在运行的容器的重启策略 是的 可以使用docker inspect这是json格式 只需要查询即可 这是正在运
  • 如何检查docker中当前/默认的日志驱动程序?

    我正在尝试检查已停止的 docker 容器的日志 但是当我这样做时docker logs
  • AWS Cloudwatch 使用 Docker 容器进行日志 - NoCredentialProviders:链中没有有效的提供商

    我的 docker compose 文件 version 2 services scraper build Scraper logging driver awslogs options awslogs region eu west 1 aw
  • 向 docker 镜像添加新的入口点

    最近 我们决定将我们的一项服务迁移到 docker 容器 该服务是另一家公司的产品 他们为我们提供了 docker 镜像 但是 我们需要在容器入口点中执行一些额外的配置步骤 我尝试的第一件事是从基础映像创建一个 DockerFile 然后添
  • 应用程序移至 Docker 生产环境时 Flask-WTF CSRF 验证失败

    我刚刚为我一直在开发的 Flask 应用程序设置了生产环境 这个堆栈是 Windows Server 2012 R2 Hyper V VM Running Ubuntu 14 04 Docker 1 5 Running Containers
  • Nextjs 无法在生产环境中的“.next”目录中找到有效的构建

    我正在 docker 中运行我的应用程序 但我的生产构建和启动脚本仅在 docker 环境中失败 虽然node env开发在docker环境下运行良好 这是我的脚本 无法进行生产构建并启动服务器 我正在使用nodemon和babel bui
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 如何从 Docker Hub 删除存储库

    如何从 Docker Hub 完全删除存储库 Docker 正在快速发展 他们的网站也是如此 这是从 docker hub Web 界面删除存储库的最新方法 首先 确保您已登录 hub docker com Simple 单击顶部的存储库链

随机推荐

  • UIAutomation:在没有实际执行的情况下点击警报视图上的取消按钮

    我在 UIAutomation 中面临这个奇怪的问题 我正在检查警报 在其中 我试图记录警报标题和警报消息 我的代码是 UIATarget onAlert function onAlert alert UIALogger logMessag
  • 将文本文件写入 blob 时无法保留换行符

    我有一个文本区域 其中包含我想要输出到文本文件以供用户下载的文本 当用户单击 保存 按钮时 我使用此功能来获取它 function saveTextAsFile var textToWrite document getElementById
  • NodeJS 中的提示模块重复输入

    我正在使用 NodeJS 及其 CLI 应用程序创建一个应用程序 为了获取用户的输入 我使用 提示 模块 我可以使用它 但是在输入提示符时 每个字符都会重复 但是输出很好 代码如下 请帮忙 prompt start prompt get p
  • 使用身份主键将新实体插入到上下文中

    我想将一条新记录插入到我的 SQL 表中 我试过 public void CreateComment int questionId string comment QuestionComment questionComment context
  • 如何删除Github上和本地的最后n次提交?

    我正在尝试从我的 GitHub 存储库之一删除最后 2 次提交 我已经按照建议尝试了here https stackoverflow com questions 448919 how can i remove a commit on git
  • Yesod、WebSockets 和持久性

    我正在尝试在 Haskell 中实现一个基于回合的游戏的服务器 我的选择是使用 Yesod 进行管理和元信息 例如 用户参与哪些游戏等 我想使用网络套接字来保持游戏内数据开销较小 看看 ws chat 示例 我不确定如何访问 Handler
  • lockCanvas 不断抛出异常

    我从 opencv4android 人脸检测 复制了示例代码 我通过了NDK部分 并在手机上运行该应用程序 然而 SurfaceView 仅显示相机预览 看来 OnCameraFrame 中所做的任何操作都不会影响 SurfaceView
  • C# - 使用反射比较两个 .net dll

    我想比较位于不同位置的两个相同的 net dll 因此 我使用加载 dllSystem Reflection Assembly LoadFile filename 代替System Reflection Assembly LoadFrom
  • Pod 文件中的“平台”指的是什么?

    当你在顶部创建一个新的 pod 文件时 会有 platform ios 9 0 我应该将此 平台 值设置为我的项目的部署目标吗 它指定您要支持 pod 项目的最低操作系统版本 如果您的应用程序项目的部署目标低于提到的 pod 项目的 iOS
  • ThreadPoolExecutor:: 来自执行器的 TaskRejectedException

    我的应用程序正在通过 Jms MessageListener 类读取消息 并且在某个时间点它会抛出异常任务拒绝异常 我知道你们大多数人都会说线程数超出了最大池大小而且队列也满了 但我观察到一些事情 发送到 MessageListener 类
  • 创建与数据库表同名的缓冲区

    我在很多地方都遇到过这段代码 DEFINE BUFFER Customer FOR Customer 我有两个问题 这样做的目的是什么 为什么创建与表同名的缓冲区是有益的 当编写代码访问该表 缓冲区时 Progress 如何知道是直接访问
  • Foreman 不使用 NGINX

    我正在尝试使用Foreman https github com ddollar foreman 版本 0 31 0 来管理我们应用程序的进程 但我对 nginx nginx 1 0 10 Phusion Passenger 3 0 11 的
  • 为什么 C 代码中的 1.0f 在生成的程序集中表示为 1065353216?

    在 C 中我有这个代码块 if x 1 a j i 1 else a j i 0 a是一个浮点值矩阵 如果我尝试以 nasm 语法查看此代码的编译程序集 线a j i 0 作业 以这种方式编码 dword rsi rdi 0 但这条线a j
  • Java 中箭头运算符“->”有什么作用?

    在搜索一些代码时 我遇到了箭头运算符 它到底是做什么的 我以为Java没有箭头运算符 return Collection
  • Entity Framework 5 的新迁移功能是否完全支持枚举更改?

    假设我们有以下简单模型 public class Car public int Year get set public string Make get set public string Model get set public CarTy
  • 如何编辑 jquery 函数

    我正在尝试修改 jQuery V 6 1 核心中的 attr 函数 我有一个plugins js 文件 该文件包含在jquery 6 1 js 文件之后的页面中 plugins js 文件包含对各种 jQuery 核心函数的改进 以适应某些
  • Scrapy获取任何网站的所有链接

    我有以下 Python 3 网络爬虫代码 import requests from bs4 import BeautifulSoup import re def get links link return links r requests
  • C++ 使用构造函数参数初始化成员数组

    我有一个模板类 其中包含编译时常量长度的单个成员数组 我希望这个数组是常量 但根据构造函数提供的输入初始化它被证明很困难 struct Input int value template
  • 正则表达式:理解音节计数器代码

    我用过迪伦的问题 https stackoverflow com questions 5686483 how to compute number of syllables in a word in javascript这里关于 JavaSc
  • 加入位于不同 Docker 容器中的 serf 节点时出现问题

    上下文 主机是 AWS EC2 Ubuntu 14 04 5 带有 Docker 版本 17 05 0 ce 容器是根据公开可用的存储库映像构建的cbhihe serf alpine bash 所有容器都位于同一个 EC2 实例上 并与网络