问题:安装Docker后无法启动服务,报错文件系统不支持
环境:从网络启动的树莓派4B | boot via pxe over NFS
解决办法:VFS或者loop device 下面别看了,最终解法把docker rootfs挂载到samba目录中
背景描述:
- 这个问题的标题可能有点难理解,场景是没有SD卡的树莓派,使用PXE从网络启动,本地无盘,root目录在远端的NFS上,当安装好docker后发现无法启动服务,报错文件系统不支持
- 看起来docker是不支持跑在NFS 文件系统架构中的,查询docker文档后有两种解决办法
- 一种是VFS,解决比较简单,改参数就行,缺点是速度慢,而且占用存储空间相当多,我粗略算了一下,至少5倍
- 另一种是挂在loop device,是比较推荐的做法,但是不好扩容,可以一开始建大一点
解法一:
直接修改docker配置文件,将文件系统修改为vfs后,重启服务即可
sudo systemctl stop docker
vi /etc/docker/daemon.json
改成这样:
{
"storage-driver": "vfs"
}
启动服务,观察文件系统为vfs
sudo systemctl start docker
docker info
解法二:挂在一个虚拟设备
创建一个img文件,容量为1G,你可以改count数字调整到2G 3G
dd if=/dev/zero of=loopbackfile.img bs=100M count=10
挂载它,并格式化
losetup -fP loopbackfile.img
losetup -a
mkfs.ext4 /root/loopbackfile.img
mkdir /loopfs
mv /var/lib/docker /var/lib/docker2
mount -o loop /dev/loop0 /var/lib/docker
rsync -xa --progress /var/lib/docker2/ /var/lib/docker2/
查看大小:
df -hP /var/lib/docker
重启docker服务,观察文件系统
sudo systemctl start docker
docker info
当后续要扩容img文件时:
- 先卸载挂载点
umount /var/lib/docker
- 删除loop device
losetup -d /dev/loop0
- 重建img文件,循环上述步骤
文档参考:
Use the VFS storage driver | Docker Documentation
How to create virtual block device (loop device/filesystem) in Linux – The Geek Diary