我有一个基于
我现在创建了一个Dockerfile:
我有些困惑,为什么Python代码可以正常运行,但当我将相同的代码放入Docker并启动容器时,它会抛出错误。我们是否需要在
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()
MongoDB
托管在云上。当仅运行Python代码并在本地主机上进行Post时,一切正常,但是从容器端执行同样的操作时会显示错误。我该如何检查容器是否连接到mongo? - S Andrewmongo
命令行客户端? - Thilo