我试图在Docker容器中设置声音,因此我创建了一个安装了alsa utils的图像和一个属于audio
组的用户。正如文档和多个教程中所指出的,我使用--device /dev/snd
运行了图像。结果是我可以毫无问题地播放声音,但仅在以sudo
运行命令时才会播放。
我想到的一个假设是,为什么会出现这种情况,主机上和容器内的audio
组的GID是不同的。我检查了一下,确实存在差异。当我使用--group-add <host_audio_gid>
运行图像时,声音工作正常。
我的结论是,它不一定是这里重要的群体的名称,而是它的主机GID。是对的吗?如果是这样,我如何(如果可能的话)确保我的用户始终被添加到主机audio
组而不在运行映像时明确指定它?如果我的结论是错误的,我思考的缺陷在哪里?我怎样才能让它发挥作用?
答案 0 :(得分:0)
首先,避免在容器中使用 sudo
(例如改用 gosu)。
我带来了坏消息,你的结论是正确的。我遇到了属于 /dev/dri/card0
的 root:video
的同样问题。但是 GID 存在差异。组 video
在主机系统 (Arch Linux) 上具有 GID 91
,但在容器 (Ubuntu:20.10) 中具有不同的 GID 44
。
据我所知,项目 x11docker 可以通过操作 CT 的 /etc/group
来解决该问题,但如果您想手动解决它而不会出现任何膨胀,我建议采用这种不太漂亮的解决方法:
在您的 Dockerfile 中向具有相应 gid 的用户添加另一个组:
ARG AGID
RUN groupadd -og $AGID hostaudio && usermod -a -G hostaudio ctuser
然后通过传递主机 GID 来构建它:
docker build --build-arg AGID=$(getent group audio | cut -d: -f3) -t yourapp .