什么工作
我在Flask中创建了一个简单的Web应用程序,它在Web浏览器访问根节点时负责操作简单的return render_template("index.html")
。
# app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def show_index():
return render_template("index.html")
if __name__ == "__main__":
app.run(port=80)
index.html是一个简单的页面,它使用tracking.js来获取用户网络摄像头并在实时视频流中跟踪他/她的面部。
打开cmd并输入python app.py
会导致Running on http://127.0.0.1:80/
访问上述URL会导致正确显示页面,要求我允许使用相机,打开它并在实时视频源中正确跟踪我的脸部。所以这一切都很好,直到这里。
什么不起作用
当我使用Docker将我的应用程序停靠时,我遇到的问题就出现了。 docker-machine ip
是192.168.99.100
打开cmd并输入:docker run -p 4000:80 my_face_track_app
导致:Running on http://0.0.0.0:80/
访问192.168.99.100:4000会导致正确显示index.html
,但我不再被要求获得相机的许可并检查JS控制台我读了以下异常:
getUserMedia() no longer works on insecure origins
这里是完整的错误日志:
我知道错误告诉我我没有在HTTPS中提供页面。
还有其他人遇到过这个问题吗?什么是问题或可能的解决方案的正确解决方案?任何帮助将非常感谢,非常感谢您提前
我为了解决问题而尝试做什么
由于为了让JS执行getUserMedia()
函数需要页面的HTTPS服务,我通过修改app.py来为我的Flask应用程序提供SSL服务,如下所示:
# app.py
from flask import Flask, render_template
import OpenSSL
app = Flask(__name__)
@app.route("/")
def show_index():
return render_template("index.html")
if __name__ == "__main__":
app.run(port=80, ssl_context="adhoc")
然后,我建立了一个新图像的应用程序。打字:
docker run -p 443:80 facetrackapphttps
结果是
Running on https://127.0.0.1:80
所以是的,这里的HTTPS是ON:问题是HTTPS Flask应用程序的端口80被映射到docker-machine ip
192.168.99.100的端口443。
试图访问192.168.99.100:443不起作用,没有显示任何内容。
有没有人知道如何做到这一点?
如果您的应用程序绑定到容器内的127.0.0.1
,您将无法从主机访问它。根据flask docs,默认情况下,flask将绑定到127.0.0.1。
您需要修改您的服务,以便它绑定到容器内的0.0.0.0
:
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, ssl_context="adhoc")