我有一个flask
基于 python 代码,只需连接到mongodb
.有两条路线Get
Post
. Get
简单地打印hello world
并使用Post
我们可以发布任何稍后保存的 json 数据MongoDB
这段 python 代码运行良好。MongoDB
托管在云上。
我现在创建了一个 Dockerfile:
FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7
RUN pip3 install pymongo
ENV LISTEN_PORT=8000
EXPOSE 8000
COPY /app /app
使用命令运行
docker run --rm -it -p 8000:8000 myflaskimage
启动此 docker 映像的容器后,我收到以下响应GET
但没有回应POST
。我在用Postman
发布json数据的软件。我收到以下错误:
pymongo.errors.ServerSelectionTimeoutError: No servers found yet
我有点困惑为什么 python 代码工作正常,但是当我将相同的代码放入 docker 并启动容器时,它会抛出错误。我们是否必须包含任何内容Dockerfile
启用连接到MongoDB
.
请帮忙。谢谢
Python代码:
from flask import Flask, request
from pymongo import MongoClient
app = Flask(__name__)
def connect_db():
try:
client = MongoClient(<mongodbURL>)
return client.get_database(<DBname>)
except Exception as e:
print(e)
def main():
db = connect_db()
collection = db.get_collection('<collectionName>')
@app.route('/data', methods=['POST'])
def data():
j_data = request.get_json()
x = collection.insert_one(j_data).inserted_id
return "Data added successfully"
@app.route('/')
def hello_world():
return "Hello World"
main()
if __name__ == '__main__':
app.run()
您的容器可能没有互联网连接。从容器化 Java 应用程序连接到公共 Web 服务时,我遇到了类似的问题。
首先我会尝试重新启动docker:
systemctl restart docker
如果没有帮助,请查看容器中的 resolv.conf:
docker run --rm myflaskimage cat /etc/resolv.conf
如果显示nameserver 127.x.x.x
那么你可以尝试:
1)关于主机系统的注释dns=dnsmasq
线路输入/etc/NetworkManager/NetworkManager.conf文件带有#
并使用重新启动 NetworkManagersystemctl restart network-manager
2) 或显式设置 docker 的 DNS,并将其添加到/etc/docker/daemon.json文件并重新启动 docker:
{
"dns": ["my.dns.server"]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)