int*_*2Eh 6 virtualization kvm qemu docker virsh
假设主机系统已经支持KVM,是否可以创建一个包含一些脚本的docker映像,以使用virsh和QEMU-KVM启动VM(在容器内部)?
我们正在研究dockerize脚本,该脚本可通过QEMU-KVM启动VM,并从VM中提取一些结果。
hld*_*dev 11
--device=/dev/kvm仅当容器用户已经可以访问/dev/kvm主机系统时才有效。
正确的方法是将容器用户添加到kvm组中,但容器下的组ID(GID)必须与主机系统上的GID相同。您可以使用 找到主机上的组 ID grep kvm /etc/groups。
现在的问题是GID取决于主机系统,不同的主机通常会有不同的GID。kvm要解决此问题,您可以使用以下命令在映像和主机系统上为组设置已知的 GID groupmod:
groupmod -g 1100 kvm
Run Code Online (Sandbox Code Playgroud)
确保/dev/kvm主机系统上有kvmas 组。
另一种更简单的方法是在容器启动时设置组:
docker run --device=/dev/kvm --group-add GID
Run Code Online (Sandbox Code Playgroud)
其中是主机系统上组GID的 ID 。kvm
这一切都是必需的,因为权限是通过 UID 和 GID 跟踪的,docker 使用主机系统的内核,因此 docker 容器上的 UID 和 GID 直接映射到主机系统上的 ID。容器用户和组与主机系统上的名称相同并不意味着它们具有相同的 ID。
docker --privileged
来自Ubuntu 17.10主机Docker 1.13.1的一些有效命令:
sudo docker run --name ub16 -i --privileged -t ubuntu:16.04 bash
Run Code Online (Sandbox Code Playgroud)
然后在Docker内部:
apt-get update -y
apt-get install qemu -y
qemu-system-x86_64
qemu-system-x86_64 \
-append 'root=/dev/vda console=ttyS0' \
-drive file='rootfs.ext2.qcow2,if=virtio,format=qcow2' \
-enable-kvm \
-kernel 'bzImage' \
-nographic \
;
Run Code Online (Sandbox Code Playgroud)
根文件系统和使用此设置生成的bzImage 。
--device=/dev/kvm
添加到上一个答案:使用--privileged可能会为您的用例打开太多权限。我已经能够使用 kvm 运行 qemu 而没有使用设备参数的特权。
尝试以下命令:
docker run --device=/dev/kvm -it ubuntu bash
码头工人内部:
apt-get update -y
apt-get install -y qemu-system-x86
qemu-system-x86_64 \
-append 'root=/dev/vda console=ttyS0' \
-drive file='rootfs.ext2.qcow2,if=virtio,format=qcow2' \
-enable-kvm \
-kernel 'bzImage' \
-nographic \
;
Run Code Online (Sandbox Code Playgroud)
简单的。您需要运行特权容器,确保容器中有 /dev/kvm 节点,安装所有软件包来为 kvm 提供服务(libvirt、quemu,等等)——这就是您所需要的。请参阅https://github.com/sivaramsk/docker-kvm以供参考。
| 归档时间: |
|
| 查看次数: |
9010 次 |
| 最近记录: |