在我的 archlinux 容器中调用以下 lsblk 命令时,它会对多个字段返回“null”。在我的本机运行系统上,lsblk 命令会按预期返回所有字段的值。
lsblk --json -b -o+partn,partuuid,parttype,uuid /dev/sdd
这是我的 docker run 命令。
docker run \
--env PS1="mycontanier(\#)[\d \T:\w]\\$ " \
--interactive \
--privileged \
--device=/dev/sdd \
--cap-add=SYS_ADMIN \
--rm \
--tty \
"mycontainer:latest"
这是我的 Dockerfile
FROM docker.io/archlinux:latest
ENV NAME=mycontainer VERSION=rolling
RUN pacman -Sy --noconfirm \
git \
dosfstools \
arch-install-scripts \
reflector \
python-archinstall \
rsync \
pkgconf
RUN pacman -Scc --noconfirm
# Configure reflector
RUN reflector \
--latest 5 \
--protocol http,https \
--save "/etc/pacman.d/mirrorlist" \
--sort rate
CMD /usr/bin/bash
我应该对我的容器进行哪些修改才能使这些 lsblk 报告我的驱动器的正确值?
答案1
我引用了帖子中接受的答案
如何访问 Docker 容器内的块设备。
对于硬件设备,您需要赋予容器操作该设备的能力,这里有 2 个选项:
选项 1:使用特权
# docker container run --rm --privileged --name c1 -it --mount type=bind,source=/dev/sdb,target=/data centos [root@7ab2eaef67cd /]# ls -al /data brw-rw---- 1 root disk 8, 16 Sep 3 08:13 /data [root@7ab2eaef67cd /]# dd if=/dev/zero of=/data bs=1 count=1 1+0 records in 1+0 records out 1 byte copied, 0.00710505 s, 0.1 kB/s [root@7ab2eaef67cd /]# exit
选项 2:使用 --device
# docker container run --rm --name c1 -it --device=/dev/sdb:/data centos [root@3a05b15b3b96 /]# ls -al /data brw-rw---- 1 root disk 8, 16 Sep 3 08:15 /data [root@3a05b15b3b96 /]# dd if=/dev/zero of=/data bs=1 count=1 1+0 records in 1+0 records out 1 byte copied, 0.00326708 s, 0.3 kB/s [root@3a05b15b3b96 /]# exit