【问题标题】:exposing Mongodb from docker container on server从服务器上的 docker 容器中暴露 Mongodb
【发布时间】:2016-12-09 06:26:56
【问题描述】:

我在两个独立的 docker 容器中运行了 Nodejs+Mongodb webapp

我有 8080 用于 Nodejs,27017 用于 docker-compose.yml 中公开的 Mongodb 端口

我使用 pymongo 从我的 python 脚本提交数据 当我在本地运行它时,我可以提交数据

但是当我在公司(内部)服务器上运行它时,我无法发送数据,并且出现 mongodb 访问错误(端口 27017:连接被拒绝)。

dbOp.py

self.read_db_config(fname)
self.dbname = user
url = 'mongodb://{0}:{1}/'.format(self.host,self.port)
print("url:{0}".format(url))

client = MongoClient(url)
db = client[self.dbname]
self.collection = db[self.coll]
if self.dbname in client.database_names():
    print("db exists::{0},{1}".format(self.dbname, client.database_names()))
    post = {"date": datetime.datetime.utcnow()}
    self.collection.insert_one(post)
else:
    print("creating db")
    post = {"date": datetime.datetime.utcnow()}
    self.collection.insert_one(post)

docker-compose.yml

version: "2"
services:
    web:
        build:
            context: .
            dockerfile: Dockerfile_node
        volumes: # Use this to mount app from local disk
            - ./:/usr/src/app
        ports:
            - "8080:8080"
            - "5858:5858"
        entrypoint: node --debug=5858 app.js
        links:
            - mongodb
    mongodb:
        image: mongo
        ports:
            - "27017:27017"

Dockerfile_node

FROM node:argon

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]

有人可以建议可能缺少什么。

【问题讨论】:

  • MongoDB 在本地工作,Request > Local_PY_Redirector > MongoDB > Local_PY_Redirector > to_Client
  • 1) 本地==本地主机。 2) PY_Script > PYMongo_Script (url = 'mongodb://{0}:{1}/'.format(self.host,self.port)) > Mongodb:27017。 3) Index.html > NodeJS>Mongodb 工作正常。所以 2 是 self.host 从 localhost 更改为 的罪魁祸首
  • 你混合了CGI sidelocal service 地址。创建一个本地循环,不能从外部调用任何 mongodb 脚本(有很多安全原因)。可以调用输出而不是整个访问数据库!只允许localhost,否则无法阻止数据库注入。
  • 你能详细说明一下吗,我是新手。在网络方面几乎没有技术。电脑动画??我没有使用任何。我可以从 8080 上公开的 NodeJS 读取 mongodb 数据库。我猜 docker 中的“链接”完成了本地循环的工作。如果你的意思是别的,请告诉我。或者你的意思是从 NodeJS 公开一个 API? (无论如何,这是我最后的手段:()
  • 在 8080 上发布并从 5858 访问,这样你就有了一个开放的端口(监听所有查询)。哪个是内部或外部查询?在 python 服务上使用pymongo 并添加本地SYNC 触发器。

标签: python mongodb docker docker-compose


【解决方案1】:

所以问题出在防火墙上。打开那边的端口解决了这个问题。写在这里,以防别人和我一样卡住了

【讨论】:

    【解决方案2】:

    不清楚你如何从你的网络调用 mongo,但由于你是在 docker-compose "network" 中运行它,你的 mongo 有一个主机名 - 'mongodb' 所以你应该把你的网站指向这个,而不是本地主机

    【讨论】:

    • 是的,这就是 NodeJs 在我的代码中所做的,而 Pymongo 需要明确的 ip/主机名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2020-09-11
    • 1970-01-01
    • 2020-06-29
    • 2020-11-30
    相关资源
    最近更新 更多