Docker目录乾坤大挪移,拯救你的NAS系统存储空间!

之前给大家推荐过玩客云的Armbian刷机固件,大家在使用玩客云这类盒子设备的时候,通常都会遇到一个问题。

就是这类设备一般都是板载内存和emmc存储,而板载存储都不会太大,一般都是标称8GB实际7GB多,装完Armbian系统之后,剩余的存储空间只有6GB多了。

微信图片_20250615171746.png

然后我们还想要玩Docker,下载docker镜像创建容器,有些docker镜像本身都比较大,不少都超过1GB了,而Docker默认是存储在系统目录/var/lib/docker下的,这样装不了几个镜像系统空间就满了。

所以针对这类盒子设备内置存储不足的问题,将Docker迁移至外接USB存储设备(U盘/移动硬盘)是高效扩容的核心方案。这样就可以将内置存储空出来,专门用于后续安装系统运行必要的程序。

那么具体如何操作呢?这里分两种情况,一种是没安装过Docker,另一种是已经安装过Docker并且有容器正在运行了。

以下分全新安装Docker迁移已有Docker环境两种情况详细说明操作步骤:

一、准备工作

首先需要连接并挂载外置存储,将U盘或移动硬盘设备插入玩客云USB,使用 lsblk 确认设备标识(如 /dev/sda1)。

格式化并挂载(以ext4为例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sudo mkfs.ext4 /dev/sda1                 # 格式化
sudo mkdir -p /mnt/udisk # 创建挂载点
sudo mount /dev/sda1 /mnt/udisk # 临时挂载
```

然后需要配置永久挂载,否则设备重启之后该设备不会自动挂载。
- 获取UUID:`sudo blkid /dev/sda1`,复制UUID。
- 编辑 `/etc/fstab`,添加以下信息:

```bash
UUID=你的UUID /mnt/udisk ext4 defaults 0 0
```

编辑`fstab`文件可以使用命令行文本编辑工具`nano`。

具体挂载方法也可参见之前的文章:[PVE找不到外接硬盘?你还没有挂载吧](https://mp.weixin.qq.com/s/NYuDDmvZ5HYfodyb-oH3hA)

[![PVE找不到外接硬盘?你还没有挂载吧](https://img.jonylee.top/i/2025/05/29/cover20250424mount.png)](https://mp.weixin.qq.com/s/NYuDDmvZ5HYfodyb-oH3hA)

### 二、未安装Docker:全新安装至外置存储
#### 🐳 Docker安装与路径配置
1. **修改Docker默认存储路径**:
- 创建软链接(若外置存储挂载在`/mnt/udisk`):

```bash
sudo mkdir -p /mnt/udisk/docker
sudo ln -s /mnt/udisk/docker /var/lib/docker # 软链接至外置存储
  1. 安装Docker
1
2
sudo apt update
sudo apt install docker.io docker-compose
  1. 验证安装
1
sudo docker info | grep "Root Dir"  # 检查存储路径是否为外置位置

微信图片_20250615181359.png


三、已安装Docker:迁移至外置存储

⚠️ 迁移步骤(无损数据)

  1. 停止Docker服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sudo systemctl stop docker
```

2. **复制数据到外置存储**:

```bash
sudo rsync -avxP /var/lib/docker/ /mnt/udisk/docker/ # 保留权限复制
```

*注:若原目录过大,可先清理无效的镜像和数据卷等,具体操作见下文。*

3. **备份原目录并创建软链接**:

```bash
sudo mv /var/lib/docker /var/lib/docker.bak # 备份
sudo ln -s /mnt/udisk/docker /var/lib/docker # 创建软链接
```

4. **重启服务并验证**:

```bash
sudo systemctl daemon-reload
sudo systemctl start docker
docker info | grep "Root Dir" # 确认路径已变更
  1. 确认Docker路径已经变更成功服务正常运行,可以手动删除/var/lib/docker.bak 备份文件夹。
1
2
3
4
5
# 仅删除原始数据(保留符号链接本身)
sudo rm -rf /var/lib/docker.bak # 删除备份目录(确认服务正常运行后)

# 重要:绝对不可删除符号链接!
# ❌ 错误操作: sudo rm -rf /var/lib/docker (这会删除真实数据!)

💡 注意事项

  1. 路径权限问题
    需要确保外置存储的挂载目录权限为755,所属用户/组为root:root(Docker默认要求)。

  2. 迁移前清理Docker
    可以使用命令:docker system prune -a --volumes -f清理未使用的Docker镜像和无用的数据,
    其中的参数说明:

  • -a:删除所有未使用的镜像
  • --volumes:包含未使用的数据卷
  • -f:强制删除,跳过确认提示

该命令作用范围包括:所有停止的容器、未被任何容器引用的镜像、未使用的数据卷、闲置网络、构建缓存。

⚠️ 注意:此命令会彻底删除未关联的资源,操作前建议确认无重要数据残留。

如果你有安装1panel面板,可以直接在面板的容器管理里可视化清理,界面见下图,其中容器、镜像、网络、存储卷页面都有清理选项,可以确认是否有用,再有选择的清理,这样更直观和稳妥。

微信图片_20250615184001.png

好了,通过以上操作,基本上可以将Docker这个系统存储占用大头给解放出来了,操作完成之后可以再使用命令df -hT看下你的内置系统存储,是不是空出来不少了?

微信图片_20250615190224.png

看我这Docker使用了8.2GB,如果放系统存储里,光Docker都放不下,哈哈。