【发布时间】:2018-11-15 16:48:04
【问题描述】:
各位小伙伴们,希望你们能帮帮我。
所以我现在正在研究 docker 容器,并尝试将我的应用程序(flask+mongodb)移植到两个单独的容器中。 MongoDB 容器已设置好并且运行良好,运行带有链接的 mongoexpress 容器可以让我访问我想要的数据库。现在我移植了我的 Flask 应用程序并且登录页面加载正常(因此 docker 端口本身可以工作)但是即使我运行带有指向我的数据库容器的链接的容器,当我尝试从数据库加载内容时出现服务器错误。
日志给了我以下回溯:
File "/usr/local/lib/python3.7/site-packages/mongoengine/queryset/manager.py", line 37, in __get__
queryset = queryset_class(owner, owner._get_collection())
File "/usr/local/lib/python3.7/site-packages/mongoengine/document.py", line 190, in _get_collection
db = cls._get_db()
File "/usr/local/lib/python3.7/site-packages/mongoengine/document.py", line 179, in _get_db
return get_db(cls._meta.get('db_alias', DEFAULT_CONNECTION_NAME))
File "/usr/local/lib/python3.7/site-packages/mongoengine/connection.py", line 241, in get_db
db = conn[conn_settings['name']]
File "/usr/local/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1323, in __getitem__
return database.Database(self, name)
File "/usr/local/lib/python3.7/site-packages/pymongo/database.py", line 107, in __init__
"of %s" % (string_type.__name__,))
TypeError: name must be an instance of str
所以我的 Flask-MongoEngine 设置如下:
app = Flask(__name__)
app.config["MONGODB_DB"] = 'database-name'
db = MongoEngine(app)
基本上,我的数据库应该在标准端口 27017 上的 localhost 上可用。在将 Flask 连接到容器时,我有什么需要考虑的吗,或者链接是否应该没有按预期公开端口?mongoexpress 可以工作并且可以访问,所以一定是我的设置有问题。
【问题讨论】:
-
我不太确定下面的答案。你可以在你的烧瓶应用程序中发布配置信息吗?
-
@RobertMoskal 我实际上不知道配置信息是什么。我在哪里可以找到它?
-
该图像的 WSGI 选项没有改变hub.docker.com/r/tiangolo/uwsgi-nginx-flask
-
how to link container in docker? 的可能重复项我认为您只需要按照其中的说明进行操作即可。或者最好还是使用 docker-compose
-
@RobertMoskal 用户定义的网络是要走的路!在建议之外解决了我的问题。看起来,我的 Flask 配置根本没有被调用。
标签: python mongodb docker flask mongoengine