为什么 lsblk 在 docker 容器内部将分区报告为“null”?

为什么 lsblk 在 docker 容器内部将分区报告为“null”?

在我的 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:使用特权

完整容器功能(--privileged)

# 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

将主机设备添加到容器(--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

相关内容