当前位置: 首页 > 知识库问答 >
问题:

音频文件未从其他泊坞站容器播放

姬歌者
2023-03-14

我正在尝试使用Flask和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)

第二个渲染了一个Jinja模板,该模板试图播放此API返回的文件:

<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:

共有1个答案

淳于玺
2023-03-14

您显示的HTML片段最终在浏览器中执行;但是浏览器在 Docker 空间之外运行,并且不知道 Docker 内部主机名。

<!-- browser doesn't know about a host named "uploader" -->
<audio src="http://uploader:5000/get_song/..." />

当您创建这个超文本标记语言片段时,您需要提供运行服务器的主机的名称和另一个容器的已发布port:号。如果浏览器和容器运行在同一个系统上(并且没有使用Docker Toolbox),您可以使用localhost作为主机名。

$('audio').attr('src', 'http://localhost:4000/get_song/'+song);

处理这个问题最健壮的方法可能是建立一个类似Nginx的反向代理。浏览器应用程序将指向代理,它将把东西转发到一个容器或另一个容器。如果你能做到这一点,那么你可以使用一个只有路径的URL,并让主机名与主页相同。

$('audio').attr('src', '/uploader/get_song/'+song);
 类似资料:
  • 我正在码头程序窗口工具包上运行 mariadb 实例。我使用风筝在 mariaDB 容器上进行了一个可取的更改。现在,它重新创建了一个实例,丢失了我所有的数据库。有没有办法从中恢复过来? 检查是否存在悬空卷,并且数量很少 docker音量ls -f悬空=真

  • 我尝试通过挂载在docker容器中运行一些Qt应用程序。我在这里看到这可能很难。 所以当我在docker容器中运行kdevelop时,它不工作(我得到一个空窗口)。但是如果我运行qtcreator,就没问题了。 我觉得区别是因为用的Qt版本(kdevelop用Qt4开发,qtcreator用Qt5)。我的所有其他Qt5应用程序都运行良好,但没有一个Qt4应用程序。 问题: 有没有人知道如何启动Qt

  • 尝试使用mediacontroller通过url播放音频文件 但我有一个错误: 09-11 10:28:23.970:E/MediaPlayer(912):尝试在没有有效MediaPlayer的情况下调用getDuration 09-11 10:28:23.970:E/MediaPlayer(912):错误(-38,0)09-11 10:28:23.990:E/MediaPlayer(912):尝

  • 我很难为个人项目设置golang dockerfile。 项目结构为: 该应用程序每5秒打印一个随机哈希,并在其上附加一个时间戳。 文件内容: 日志 go.mod: hash.go: 我拼凑了以下泊坞文件: 然而,我一直得到这个错误(和类似的错误): 我已经在网上搜索了几个小时试图解决这个问题,我真的不明白它有什么问题。当谈到docker文件中的依赖管理时,我怀疑我做错了什么。 我提到我是围棋新手

  • 我正在开发一个服务,并使用docker compose来旋转服务,如postgres,redis,elasticsearch。我有一个基于RubyOnRails的web应用程序,可以读写所有这些服务。 这是我的docker-compose.yml 我可以ping这个网络中的容器 到目前为止一切顺利。现在,我想在我的主机上运行ruby on rails应用程序,但是能够使用类似< code > Po

  • 因此,我使用boto3 s3和python脚本来列出bucket。 s3_client = boto3.client('s3 ') 当我在桌面上运行它时,它可以正常工作,因为我使用aws配置命令设置aws_access_key_id和aws_secret_access_key。 当我在 AWS 上将其作为容器运行时,我是否需要在使用aws_access_key_id的环境变量和aws_secret