首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保主机GID和docker容器GID之间的正确关系?

如何确保主机GID和docker容器GID之间的正确关系?
EN

Stack Overflow用户
提问于 2018-02-22 06:47:06
回答 1查看 51关注 0票数 2

我试图在Docker容器中设置声音,所以我创建了一个安装了alsa utils的镜像和一个属于audio组的用户。正如文档和多个教程中所指出的,我使用--device /dev/snd运行了该映像。其结果是,我可以播放声音没有问题,但只有当运行的命令作为sudo

我想到的一个假设是,主机上的audio组和容器内的GID是不同的。我检查了一下,确实是有区别的。当我用--group-add <host_audio_gid>运行图像时,声音工作正常。

我的结论是,在这里重要的不一定是组的名称,而是它的宿主GID。是那么回事吗?如果是这样,我如何(如果可能)确保我的用户始终被添加到主机audio组,而不在运行映像时显式指定它?如果我的结论是错误的,那么我思维中的缺陷在哪里,我如何才能让它工作呢?

EN

回答 1

Stack Overflow用户

发布于 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的用户添加另一个组:

代码语言:javascript
复制
ARG AGID
RUN groupadd -og $AGID hostaudio && usermod -a -G hostaudio ctuser

然后通过传递主机GID来构建它:

代码语言:javascript
复制
docker build --build-arg AGID=$(getent group audio | cut -d: -f3) -t yourapp .
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48916822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档