【发布时间】: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 side和local service地址。创建一个本地循环,不能从外部调用任何 mongodb 脚本(有很多安全原因)。可以调用输出而不是整个访问数据库!只允许localhost,否则无法阻止数据库注入。 -
你能详细说明一下吗,我是新手。在网络方面几乎没有技术。电脑动画??我没有使用任何。我可以从 8080 上公开的 NodeJS 读取 mongodb 数据库。我猜 docker 中的“链接”完成了本地循环的工作。如果你的意思是别的,请告诉我。或者你的意思是从 NodeJS 公开一个 API? (无论如何,这是我最后的手段:()
-
在 8080 上发布并从 5858 访问,这样你就有了一个开放的端口(监听所有查询)。哪个是内部或外部查询?在 python 服务上使用
pymongo并添加本地SYNC触发器。
标签: python mongodb docker docker-compose