如何在 Docker 容器中指定已挂载设备的用户和组所有者?

问题描述

我正在使用 VSCode Devcontainer 并且:

  • 我需要从容器内访问 /dev/kvm
  • 我不希望容器中的用户root

所以,我用 --device=/dev/kvm 启动容器,我可以访问它,但是我不能使用它,因为它归 rootkvm 组所有主持人

vscode@c017a6dc1bc0:/workspaces/project$ ls -l /dev/kvm
crw-rw---- 1 root 108 10,232 May  1 09:56 /dev/kvm

108 id 对应于主机上的 kvm 组,但它没有映射到容器中的任何内容。即使我创建了组 kvm 它也不起作用。而且我不想对 108 进行硬编码,因为如果我曾经在另一台计算机上使用 Dockerfile,这不可靠。

一种可能性是从容器内运行 chown myuser /dev/kvm,但 myuser 是非 root 用户,我希望 kvm 设备在容器启动后自动可用。>

我知道 VScode 中存在 postCreateCommand,但它也不会以 root 身份执行,因此不允许我更改 /dev/kvm 组。

FROM ubuntu:20.04

ARG USERNAME=myuser
ARG USER_UID=1000
ARG USER_GID=$USER_UID

RUN groupadd --gid $USER_GID $USERNAME \
    && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME
    # && groupadd -r kvm \
    # && adduser $USERNAME kvm \
    # && gpasswd -a $USERNAME kvm

USER $USERNAME
{
    "name": "Test container","build": {
        "dockerfile": "Dockerfile"
    },"settings": {
        "terminal.integrated.shell.linux": "/bin/bash"
    },"remoteUser": "myuser","runArgs": [
        "--device=/dev/kvm"
    ]
}

在这种情况下,最佳实践是什么?我应该以某种方式将 /etc/group 安装在容器或其他东西中吗?有没有办法从 Dockerfile 更改由命令行安装的设备的组所有者?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)