【发布时间】:2021-05-01 10:14:16
【问题描述】:
我正在使用VSCode Devcontainer 并且:
- 我需要从容器内访问
/dev/kvm - 我不希望容器中的用户是
root
所以,我用--device=/dev/kvm 启动容器,我可以访问它,但是我不能使用它,因为它归root 和主机的kvm 组所有 .
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 更改命令行挂载的设备的组所有者?
【问题讨论】:
-
在阅读此问题并查看解决问题的 Dockerfile 更改后,我能够得到一些工作:github.com/Linutronix/elbe/issues/164
-
谢谢@pestophagous。我在做同样的事情,我猜:
ARG KVM_GID=108然后RUN groupadd -g $KVM_GID kvm && adduser $USERNAME kvm。缺点是组 ID 可能会从一个发行版更改为另一个发行版。
标签: docker visual-studio-code dockerfile vscode-remote vscode-devcontainer