This question already has answers here:
Deploying a minimal flask app in docker - server connection issues
(6个答案)
Are a WSGI server and HTTP server required to serve a Flask app?
(2个答案)
3个月前关闭。
我有一个Flask RestX的flask应用程序,可以与
这是我的文件夹结构。我正在运行
![python - 导入无法在Docker中与Flask一起使用(没有gunicorn!)-LMLPHP python - 导入无法在Docker中与Flask一起使用(没有gunicorn!)-LMLPHP]()
因此,我想使用
我该如何解决?
(6个答案)
Are a WSGI server and HTTP server required to serve a Flask app?
(2个答案)
3个月前关闭。
我有一个Flask RestX的flask应用程序,可以与
flask run
一起很好地工作,但是与Docker有关的导入问题。我已经看到了一些有关此问题和答案,但它们都涉及到Gunicorn,但是我没有使用Gunicorn 。这是我的文件夹结构。我正在运行
docker-compose
文件,该文件使用flask.dev.dockerfile
以及Redis容器。因此,我想使用
RedisDatabase
文件中的redis包装器database.py
。 PyCharm将其插入为from ivd_app.database import RedisDatabase
以及__init__.py
文件的其余部分,总结如下:from flask import Flask, request
from flask_cors import CORS
from flask_restx import Api, Resource, fields
def create_app(db=None):
app = Flask(__name__, instance_relative_config=True)
if (db is None):
db = RedisDatabase()
api = Api(app, version='0.0.1', title='IVD')
config_endpoint = api.namespace(
'config', description='APIs to Send configuration to and from the Front End'
)
config_model = api.model('Configuration', {
# the model
})
@config_endpoint.route('/')
class ConfigurationEndpoint(Resource):
@config_endpoint.expect(config_model, validate=True)
def put(self):
# the put endpoint
def get(self):
# the get endpoint
return app
# if __name__ == "__main__":
# create_app().run(host="0.0.0.0", debug=True)
设置环境变量后,当我使用dockerfile中的CMD flask run
时,应用程序运行。但是由于某种原因,我无法访问Flask服务器,所以我取消了底部的注释,因为我知道这些行之有效,并在Dockerfile中使用CMD python ivd_app/__init__.py
。但是容器退出了:flask_1 | Traceback (most recent call last):
flask_1 | File "ivd_app/__init__.py", line 38, in <module>
flask_1 | from ivd_app.database import RedisDatabase
flask_1 | ModuleNotFoundError: No module named 'ivd_app'
如果我删除导入语句,并将RedisDatabase
类放入__init__.py
文件,则整个应用程序当然可以工作。但我想将其分成另一个文件。我该如何解决?
最佳答案
默认情况下,Flask绑定(bind)到127.0.0.1
,因此,如果您使用CMD flask run
,它将拒绝来自容器外部的连接。
如果我没记错的话,您必须要么
ENV FLASK_RUN_HOST 0.0.0.0
CMD flask run
要么CMD flask run --host 0.0.0.0
至于其他方法,我会尝试CMD python -m ivd_app
因为您似乎尝试运行模块而不是独立脚本。