Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 音频文件未从其他docker容器播放_Javascript_Html_Docker_Flask_Jinja2 - Fatal编程技术网

Javascript 音频文件未从其他docker容器播放

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

我正在尝试使用Flask和Docker开发一个小型音乐应用程序。我的compose中有两个docker服务,都运行Flask

第一个称为上传器:


您显示的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: