Python 如何从Flask Docker容器访问MongoDB Atlas Service?

Python 如何从Flask Docker容器访问MongoDB Atlas Service?,python,mongodb,docker,flask,Python,Mongodb,Docker,Flask,我对接了我的React+Flask+Nginx应用程序,并在我工作的一个内部服务器中提供了它 我使用mongoatlas作为数据库,并使用Flask中的pymongo创建API 我的烧瓶应用程序的初始部分如下所示: from flask import Flask, render_template, request, jsonify from flask_cors import CORS from bson.objectid import ObjectId import pymongo impor

我对接了我的
React
+
Flask
+
Nginx
应用程序,并在我工作的一个内部服务器中提供了它

我使用
mongoatlas
作为数据库,并使用
Flask
中的
pymongo
创建API

我的烧瓶应用程序的初始部分如下所示:

from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
from bson.objectid import ObjectId
import pymongo
import json
import ssh
import OpenSSL
import pprint

application = Flask(__name__)
cors = CORS(application)

client = pymongo.MongoClient("mongodb+srv://...")

db = pymongo.database.Database(client, '...')
col = pymongo.collection.Collection(db, '...')

# some parts are written as `...`
#Using ubuntu as our base
FROM ubuntu:latest

#Install commands in ubuntu, including pymongo for DB handling

RUN apt-get update -y
RUN apt-get install -y python3 python3-pip python3-dev build-essential


#Unsure of COPY command's purpose, but WORKDIR points to /backend
COPY . /backend
WORKDIR /backend/

RUN pip3 install --proxy <proxy_settings_for_my_workplace> -r requirements.txt
RUN python3 -m pip install --proxy <proxy_settings_for_my_workplace> pymongo[srv]

ENV HTTPS_PROXY=<proxy_settings_for_my_workplace>
ENV HTTP_PROXY=<proxy_settings_for_my_workplace>

#Run order for starting up the backend
ENTRYPOINT ["python3"]
CMD ["app.py"]
Flask
应用程序的
Dockerfile
如下所示:

from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
from bson.objectid import ObjectId
import pymongo
import json
import ssh
import OpenSSL
import pprint

application = Flask(__name__)
cors = CORS(application)

client = pymongo.MongoClient("mongodb+srv://...")

db = pymongo.database.Database(client, '...')
col = pymongo.collection.Collection(db, '...')

# some parts are written as `...`
#Using ubuntu as our base
FROM ubuntu:latest

#Install commands in ubuntu, including pymongo for DB handling

RUN apt-get update -y
RUN apt-get install -y python3 python3-pip python3-dev build-essential


#Unsure of COPY command's purpose, but WORKDIR points to /backend
COPY . /backend
WORKDIR /backend/

RUN pip3 install --proxy <proxy_settings_for_my_workplace> -r requirements.txt
RUN python3 -m pip install --proxy <proxy_settings_for_my_workplace> pymongo[srv]

ENV HTTPS_PROXY=<proxy_settings_for_my_workplace>
ENV HTTP_PROXY=<proxy_settings_for_my_workplace>

#Run order for starting up the backend
ENTRYPOINT ["python3"]
CMD ["app.py"]
使用ubuntu作为我们的基础 来自ubuntu:最新版本 #在ubuntu中安装命令,包括用于DB处理的pymongo 运行apt获取更新-y 运行apt get install-y python3 python3 pip python3 dev build-sential #不确定COPY命令的用途,但WORKDIR指向/backend 抄袭/后端 WORKDIR/后端/ 运行pip3安装--proxy-r requirements.txt 运行python3-mpip安装——代理pymongo[srv] 环境HTTPS_代理= ENV HTTP_代理= #运行启动后端的命令 入口点[“蟒蛇3”] CMD[“app.py”] 一切都很好地建立起来了。但是,在它启动后,我可以很好地访问前端部件,但我后端的日志显示一个错误,显示:

pymongo.errors.ServerSelectionTimeoutError:.mongodb.net:27017:超时,.mongodb.net:27017:超时,.mongodb.net:27017:超时

我假设这不起作用,因为我无法使用
pymongo
通过Flask访问
Mongo Atlas
,我试图将Flask映像的IP添加到
Mongo Atlas
的网络访问控制台

但很明显,这是行不通的


我如何解决这个问题?

你的Mongo Atlas在哪里?我使用的是云服务:你需要将你的作品的互联网网关IP白名单,而不是docker端的任何内容。