在Docker容器中使用音频运行应用
。
基本思想是使用音频和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
。当然,您可以将两者结合在一起,并与xServer
ui转发一起使用,
只需提及:
- 您可以在其中处理其中的大部分(全部都没有使用的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
以上是 在Docker容器中使用音频运行应用 的全部内容, 来源链接: utcz.com/qa/433155.html