我试图在Docker容器中设置声音,所以我创建了一个安装了alsa utils的镜像和一个属于audio组的用户。正如文档和多个教程中所指出的,我使用--device /dev/snd运行了该映像。其结果是,我可以播放声音没有问题,但只有当运行的命令作为sudo。
我想到的一个假设是,主机上的audio组和容器内的GID是不同的。我检查了一下,确实是有区别的。当我用--group-add <host_audio_gid>运行图像时,声音工作正常。
我的结论是,在这里重要的不一定是组的名称,而是它的宿主GID。是那么回事吗?如果是这样,我如何(如果可能)确保我的用户始终被添加到主机audio组,而不在运行映像时显式指定它?如果我的结论是错误的,那么我思维中的缺陷在哪里,我如何才能让它工作呢?
发布于 2021-04-27 08:57:50
首先,避免在容器中使用sudo (例如使用gosu )。
我带来了坏消息,你的结论是正确的。我正面临着属于root:video的/dev/dri/card0同样的问题。但是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 .https://stackoverflow.com/questions/48916822
复制相似问题