mongodb - 与 vpc 对等的 atlas 集群未将 docker swarm 上的服务列入白名单

标签 mongodb docker amazon-ec2 docker-swarm

环境概述:

  • 与 vpc
  • 对等的 Atlas 上的 Mongodb 集群
  • 在 VPC 中运行的 Ec2 实例
  • EC2 实例中的 docker swarm。

  • 我正在经历什么:
  • 我可以使用 EC2 实例
  • 中的 mongo cli 连接到 mongo
  • 我所有的容器都无法连接到 mongodb,即使它们在这个 EC2 实例上运行
  • 一旦我将他们能够连接的 EC2 实例的公共(public) IP 列入白名单 - 但这很奇怪,我希望他们能够连接,因为他们正在运行的实例能够在没有任何特殊白名单的​​情况下连接。

  • 我使用的群初始化命令:docker swarm --init --advertise-addr <private ip of the EC2>当我尝试使用公共(public) ip 时它不起作用,当我不添加 --advertise-addr 时它也不起作用到swarm init。
    额外的有用信息:
    Dockerfile:
    FROM node:12-alpine as builder
    
    ENV TZ=Europe/London
    RUN npm i npm@latest -g
    RUN mkdir /app && chown node:node /app
    WORKDIR /app
    
    RUN apk add --no-cache python3 make g++ tini \
        && apk add --update tzdata
    
    USER node
    COPY package*.json ./
    RUN npm install --no-optional && npm cache clean --force
    ENV PATH /app/node_modules/.bin:$PATH
    COPY . .
    EXPOSE 8080
    
    
    FROM builder as dev
    USER node
    CMD ["nodemon", "src/services/server/server.js"]
    
    FROM builder as prod
    USER node
    HEALTHCHECK --interval=30s CMD node healthcheck.js
    ENTRYPOINT ["/sbin/tini", "--"]
    CMD ["node", "--max-old-space-size=2048" ,"src/services/server/server.js"]
    
    
    
    
    我不知道它为什么会这样,我该如何解决这个问题?

    最佳答案

    在与高级 DevOps 工程师会面后,我们终于找到了问题所在。
    事实证明,容器运行所在网络的 CIDR block 与 VPC 的 CIDR 重叠。我们所做的是将以下内容添加到 docker-compose

    networks:
      wm-net:
        driver: overlay
        ipam:
          driver: default
          config:
            - subnet: 172.28.0.0/16 #this CIDR doesn't overlap with the VPC
    
    

    关于mongodb - 与 vpc 对等的 atlas 集群未将 docker swarm 上的服务列入白名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64479493/

    相关文章:

    python - 在 ec2 上安装 lxml 时出错

    node.js - 使用 NodeJS 重构 mongoose 集合模型

    docker - 使用 Cloudflare 设置 Traefik

    amazon-web-services - 如何为 ec2 SpotFleet 实例的 SecurityGroups 定义对象列表

    python - 通过自定义 AMI 获取 EC2 实例的 AWS CloudFormation 中的用户数据不起作用

    docker - 让 TeamCity 在 Docker 上运行

    javascript - Node.js 更新 MongoDB 中的元素

    c# - 在 Mongo 中存储 Utc 和本地日期时间

    node.js - 未处理的 promise 拒绝警告 : MongooseServerSelectionError: connect ECONNREFUSED 127. 0.0.1:27017

    docker - dockerfile 中的 RUN 和 bash 脚本有什么区别?