我正在尝试在 Docker 中构建虚拟磁盘映像。我可以创建空文件dd
并创建分区,parted
但是一旦我尝试创建文件系统,它就会失败,并提示找不到设备。在 Docker 容器中,我运行为root
并且已传递--privileged=true
给docker run
.
这可以在 docker 之外运行,也可以在我本地计算机上的 Docker 中运行。它仅在我的构建服务器(AWS 弹性代理)上失败。
这是输出的一部分,显示块设备在调用创建文件系统之前就存在。
28-Feb-2019 10:39:33 +./scripts/make.sh:105> ls -l /dev/loop2 /dev/loop2p1 /dev/loop2p2
28-Feb-2019 10:39:33 brwxrwxrwx 1 root disk 7, 2 Feb 28 15:39 /dev/loop2
28-Feb-2019 10:39:33 brwxrwxrwx 1 root disk 259, 8 Feb 28 15:39 /dev/loop2p1
28-Feb-2019 10:39:33 brwxrwxrwx 1 root disk 259, 9 Feb 28 15:39 /dev/loop2p2
28-Feb-2019 10:39:33 +./scripts/make.sh:108> mkfs.vfat -n boot /dev/loop2p1
28-Feb-2019 10:39:33 mkfs.fat 3.0.28 (2015-05-16)
28-Feb-2019 10:39:33 /dev/loop2p1: No such device or address
以及脚本部分:
## Create zero'd file
dd if=/dev/zero of=disk.img bs=1M count=400
## Find next available loop device
local lodev=$(losetup -f)
## Have flat file look like a block device
ls -l ${lodev}*
losetup ${lodev} disk.img
## Create partition table and partition
parted -s -a optimal ${lodev} mklabel msdos
parted -s -a optimal -- ${lodev} unit compact mkpart primary "10" "20"
parted -s -a optimal -- ${lodev} unit compact mkpart primary "21" "-1"
parted -s ${lodev} set 1 boot on
ls -l ${lodev}*
## Create filesystem
mkfs.vfat -n boot ${lodev}p1
mkfs.ext3 -L rootfs ${lodev}p2
有什么想法为什么mkfs.fat
认为块设备看起来不存在吗?
答案1
解决此问题的一种方法是映射 /dev 文件夹。似乎对我有用。
docker run --privileged -ti -v /dev:/dev ...