【问题标题】:How to ensure proper relationship between host GIDs and docker container GIDs?如何确保主机 GID 和 docker 容器 GID 之间的正确关系?
【发布时间】:2018-08-01 16:16:40
【问题描述】:

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

我想到为什么会出现这种情况的一个假设是主机上和容器内的audio 组的 GID 不同。我检查了一下,确实有区别。当我使用--group-add <host_audio_gid> 运行图像时,声音效果很好。

我的结论是,这里重要的不一定是组的名称,而是它的主机 GID。那正确吗?如果是这样,我如何(如果可能)确保我的用户始终被添加到主机 audio 组中,而无需在运行映像时明确指定它?如果我的结论是错误的,那么我的想法的缺陷在哪里,我该如何让它发挥作用?

【问题讨论】:

    标签: docker permissions


    【解决方案1】:

    首先,避免在容器中使用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 .
    

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 2018-01-05
      • 2022-11-11
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2017-11-24
      相关资源
      最近更新 更多