在NFS文件系统上运行的Linux 下使用Docker的解决办法

本文介绍了解决树莓派从网络启动并在NFS文件系统上运行Docker时遇到的问题。提供了两种解决方案:一是通过修改Docker配置文件使用VFS文件系统;二是通过创建虚拟块设备并挂载来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:安装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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值