Javascript 音频文件未从其他docker容器播放
我正在尝试使用Flask和Docker开发一个小型音乐应用程序。我的compose中有两个docker服务,都运行Flask 第一个称为上传器:Javascript 音频文件未从其他docker容器播放,javascript,html,docker,flask,jinja2,Javascript,Html,Docker,Flask,Jinja2,我正在尝试使用Flask和Docker开发一个小型音乐应用程序。我的compose中有两个docker服务,都运行Flask 第一个称为上传器: 您显示的HTML片段最终在浏览器中执行;但是浏览器在Docker空间之外运行,并且不知道Docker内部主机名 创建此HTML片段时,需要提供服务器正在运行的主机的名称以及其他容器的已发布的端口:编号。如果浏览器和容器在同一个系统上运行(并且没有使用Docker Toolbox),则可以使用localhost作为主机名 $('audio').att
您显示的HTML片段最终在浏览器中执行;但是浏览器在Docker空间之外运行,并且不知道Docker内部主机名
创建此HTML片段时,需要提供服务器正在运行的主机的名称以及其他容器的已发布的端口:
编号。如果浏览器和容器在同一个系统上运行(并且没有使用Docker Toolbox),则可以使用localhost
作为主机名
$('audio').attr('src','http://localhost:4000/get_song/"歌",;
处理这一问题最可靠的方法可能是设置一个反向代理,如Nginx。浏览器应用程序将指向代理,并将内容转发到一个或另一个容器。如果可以这样做,则可以使用仅路径URL,并使主机名与主页相同
$('audio').attr('src','/uploader/get_song/'+song);
如何启动docker容器?@Stefano我使用docker compose up启动它们。我已经用我的作曲文件更新了这个问题。哇,这真是太棒了!我没有想到,大多数API调用都是使用docker内部主机名执行的。但这是有道理的,因为浏览器并不知道它们。非常感谢你!
@app.route("/get_song/<string:filename>/", methods=["GET"])
def get_song(filename):
path = os.path.join(flask.current_app.instance_path, flask.current_app.config["UPLOAD_FOLDER"])
return flask.send_from_directory(path, filename, as_attachment=True)
<audio controls="controls" autoplay="autoplay"></audio>
<a href="javascript:void(0);" onclick="playSong('{{song}}')">{{song}}</a>`
<script type="text/javascript">
function playSong(song){
$('audio').attr('src', 'http://uploader:5000/get_song/'+song);
}
</script>
version: "3"
services:
uploader:
image: project_uploader:latest
ports:
- "4000:5000"
networks:
- upload
frontend_server:
image: project_frontend_server:latest
ports:
- "5000:5000"
networks:
- upload
networks:
upload: