Docker - 无法获取用户网络摄像头:getUserMedia()不再适用于不安全的起源

问题描述 投票:0回答:1

什么工作

我在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

这里是完整的错误日志:

enter image description here

我知道错误告诉我我没有在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不起作用,没有显示任何内容。

有没有人知道如何做到这一点?

python docker flask webcam tracking.js
1个回答
2
投票

如果您的应用程序绑定到容器内的127.0.0.1,您将无法从主机访问它。根据flask docs,默认情况下,flask将绑定到1​​27.0.0.1。

您需要修改您的服务,以便它绑定到容器内的0.0.0.0

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, ssl_context="adhoc")
© www.soinside.com 2019 - 2024. All rights reserved.