从 docker 容器中创建一个千斤顶客户端

Posted

技术标签:

【中文标题】从 docker 容器中创建一个千斤顶客户端【英文标题】:creating a jack client from inside a docker container 【发布时间】:2017-12-21 02:05:15 【问题描述】:

我使用插孔在我的电脑中的多个声卡之间路由音频。 为了录制音频,我使用了一个非常方便的 FFmpeg 命令,它创建了一个可写的 jack 客户端: ffmpeg -f jack -i <client_name> -strict -2 -y <output_file_name>。 到目前为止,这非常有效。

问题从这里开始:

我还有一个 nginx docker,它记录我的数据并使其可用于流式传输。当尝试在 docker 中使用相同的命令时,我收到以下错误:"Unable to register as a JACK client".

我开始查看FFmpeg code,发现FFmpeg命令从jack API调用jack_client_open命令失败。

似乎从 docker 内部的 FFmpeg 请求到主机上运行的 jackd 服务器之间的连接存在某种问题。

有没有一种简单的方法可以在两个[暴露端口]之间建立连接?

(我看到了一些解决方案,例如netjack2,但在创建更复杂的服务器-客户端架构之前,我想找到一个更优雅的解决方案)。

感谢您的帮助!

【问题讨论】:

如果可以使用 Unix socket 运行jack 服务器并使用它与ffmpeg 通信,那么您可以将 socket 文件挂载到容器中并使用它进行通信。您可以做的另一件事是在 host 网络模式下使用 docker,并使用 docker 内的主机 IP 进行通信。 解决方案1:我挖掘了插孔代码,发现所有套接字都位于/dev/shm。我与 docker 共享此卷并运行 FFmpeg 命令,但无法连接。任何想法为什么?解决方案2:想过用ssh,但是有点歪——***.com/questions/31720935/… 如果您可以添加您正在执行的命令来运行容器并在您尝试在容器内安装套接字时共享输出,这将很有帮助。 【参考方案1】:

我刚刚完成了这项工作,我在 docker run 命令中需要以下内容:

--volume=/dev/shm:/dev/shm:rw
--user=1000

因此容器运行的用户可以从我的主机用户帐户生成的 jackd 访问 /dev/shm 中的文件。如果您的 jackd 和容器都以 root 用户身份运行,则不需要这样做。

您可以通过在容器中运行 jack_simple_client 来确认它的工作,您应该会听到哔声。

【讨论】:

以上是关于从 docker 容器中创建一个千斤顶客户端的主要内容,如果未能解决你的问题,请参考以下文章

在现有 Docker 容器中创建现有 Mongo DB 数据库的连接

从 wsdl 在 typescript 中创建肥皂客户端

Docker 学习总结(70)—— 从正在运行的 Docker 容器创建镜像

Docker 学习总结(70)—— 从正在运行的 Docker 容器创建镜像

如何在 Go 中创建 WebSocket 应用程序

在 Java 客户端中创建 Mat 对象,使用 opencv 从 C++ 服务器发送