当前位置: 首页 > 面试题库 >

在Docker容器中使用音频运行应用

宦兴朝
2023-03-14
问题内容

基本思想是使用音频和ui(vlc,firefox,skype等)运行应用程序

我正在使用pulseaudio搜索docker容器,但是找到了所有在tcp上使用pulseaudio流传输的容器。(应用程序的安全沙箱)

  • https://gist.github.com/hybris42/ce429de428e5af3a344a
  • https://github.com/jlund/docker-chrome-pulseaudio
  • https://github.com/tomparys/docker-skype-pulseaudio

就我而言,我更喜欢直接从容器内的应用程序播放音频到主机pulseaudio。(没有SSH隧道和膨胀的Docker映像)

Pulseaudio,因为我的qt应用正在使用它;)


问题答案:

我花了一些时间才知道需要什么。(Ubuntu)

我们从docker run命令开始 docker run -ti --rm myContainer sh -c "echo run something"

ALSA:
我们需要/dev/snd一些硬件访问。当我们把它们放在一起时

docker run -ti --rm \
    -v /dev/snd:/dev/snd \
    --lxc-conf='lxc.cgroup.devices.allow = c 116:* rwm' \
    myContainer sh -c "echo run something"`

在没有lxc标志的新docker版本中,应使用以下命令:

docker run -ti --rm \
    -v /dev/snd:/dev/snd \
     --privileged \
    myContainer sh -c "echo run something"`

的PulseAudio:
在这里我们需要基本/dev/shm/etc/machine- id/run/user/$uid/pulse。但这还不是全部(可能是由于Ubuntu及其过去的方式)。XDG_RUNTIME_DIR主机系统和docker容器中的环境变量必须相同。您可能还需要这样做,/var/lib/dbus因为某些应用程序正在从此处访问机器ID(可能仅包含指向“真实”机器ID的符号链接)。至少您可能需要隐藏的主文件夹~/.pulse来存储一些临时数据(对此我不确定)。

docker run -ti --rm \
    -v /dev/shm:/dev/shm \
    -v /etc/machine-id:/etc/machine-id \
    -v /run/user/$uid/pulse:/run/user/$uid/pulse \
    -v /var/lib/dbus:/var/lib/dbus \
    -v ~/.pulse:/home/$dockerUsername/.pulse \
    myContainer sh -c "echo run something"

在新的Docker版本中,您可能需要添加--privileged。当然,您可以将两者结合在一起,并与xServerui转发一起使用,

只需提及:

  • 您可以在其中处理其中的大部分(全部都没有使用的ID) dockerfile
  • uid=$(id -u)得到的用户ID和GID与id -g
  • 使用此ID创建一个docker用户

创建用户脚本:

mkdir -p /home/$dockerUsername && \
echo "$dockerUsername:x:${uid}:${gid}:$dockerUsername,,,:/home/$dockerUsername:/bin/bash" >> /etc/passwd && \
echo "$dockerUsername:x:${uid}:" >> /etc/group && \
mkdir /etc/sudoers.d && \
echo "$dockerUsername ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$dockerUsername && \
chmod 0440 /etc/sudoers.d/$dockerUsername && \
chown ${uid}:${gid} -R /home/$dockerUsername


 类似资料:
  • 其基本思想是运行带有音频和ui的应用程序(vlc、firefox、skype…) 我在使用pulseaudio搜索docker容器,但我找到的所有容器都在TCP上使用pulseaudio流。(应用程序的安全沙箱) https://gist.github.com/hybris42/ce429de428e5af3a344a https://github.com/jlund/docker-chrome-

  • 问题内容: 我已经创建了一个Docker映像来测试Angular应用程序,但是无法从主机连接到Docker容器中正在运行的应用程序。 该映像是使用具有以下内容的Dockerfile创建的:EXPOSE 4200 8080 80 我使用以下命令运行docker容器:docker run -ti -p 4200:4200 angulardev / bin / bash 在容器内,我创建Angular应

  • 本文向大家介绍详解在Docker容器中运行Spring Boot应用,包括了详解在Docker容器中运行Spring Boot应用的使用技巧和注意事项,需要的朋友参考一下 spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置。另一方面,Spring Boot还具备将代码直接构建为可执行jar包的能力,这个jar包

  • Debug.DockerFile 运行命令 正在连接RabbitMQ

  • 我有一个react-app,它简单地显示hello-world消息,但我喜欢运行应用程序通过docker-container,但有这个问题。在此消息之后,进程停止,没有运行应用程序。 我不能理解我应该做什么,因为我有一个很小的应用程序,在Dockerfile中有基本代码 我需要安装webpack-dev-server吗,我尝试了,但得到了版本错误,如“手动添加服务器”的版本比已经安装的服务器低。所

  • 问题内容: 这个问题是我继续研究Docker的一部分,并且在某些方面跟进了我先前的问题之一。我现在已经了解了如何通过将一堆Docker容器链接在一起来获得完整的应用程序堆栈(实际上是微型VPS)。例如,可以创建一个堆栈,为Apache+ PHP5提供一堆扩展名+ Redis + MemCached+MySQL,它们都在Ubuntu上运行,无论是否带有附加数据容器,都可以轻松地序列化用户数据。 一切