起初是因为我的TrueNas是装在一根500G的SN750的MVME SSD上,所以想要将truenas中的docker数据设置放在boot-pool中,这样可以不用跑在机械硬盘的阵列上,可以减少唤醒机械硬盘的次数(我设置了硬盘休眠,用以节省电量),而且就算哪天SN750挂了也不怕,毕竟只是跑几个容器和系统,随时可以重做,把容器的关键数据定时备份到机械阵列中就好。但是TrueNas的GUI界面不允许设置docker的数据目录为boot-pool。所以放弃了用GUI管理docker,shell中管理运行。
传统方式是修改/etc/docker/daemon.json
,添加类似"data-root": "/mnt/boot-pool/docker-data"
这样的目录指定就行,但是TrueNas会在重启之后删除掉/etc/docker/daemon.json
文件,是因为:
- TrueNAS SCALE 是基于 Debian + Kubernetes + Docker 的一套系统
- 系统服务(包括 Docker)由 TrueNAS 的 middlewared 动态生成配置
/etc/docker/daemon.json
不被视为持久配置文件,每次重启 TrueNAS 时,Docker 服务会被 middleware 自动重启并清空配置
解决方法:
使用 systemd drop-in 文件来持久化 Docker 启动参数
步骤 1:创建一个
systemd
的 override 文件,绕过 daemon.json 来配置 Docker 启动参数创建 override 文件
# 如果没有就创建目录,但正常来说应该系统已经创建了 sudo mkdir -p /etc/systemd/system/docker.service.d/ touch override.conf
编辑 drop-in 文件
vim /etc/systemd/system/docker.service.d/override.conf
- 示例:添加你需要的参数,例如加速器、日志驱动等:
[Service] ExecStart= ExecStart=/usr/bin/dockerd --registry-mirror=https://mirror.ccs.tencentyun.com --log-driver json-file
填入以下内容
# --data-root= 后面接你的存储数据的目录 [Service] ExecStart= ExecStart=/usr/bin/dockerd --data-root=/data/docker/docker-root
注意:
- 第一行
ExecStart=
是必要的,用于清除默认的启动命令。 /usr/bin/dockerd
路径是标准位置,但你可以确认下是否为这个(which dockerd
)
- 第一行
步骤 2:重载 systemd 并重启 Docker
systemctl daemon-reexec systemctl daemon-reload systemctl restart docker
步骤 3:验证是否生效
docker info | grep "Docker Root Dir"
你应该看到:
Docker Root Dir: /data/docker/docker-root
此设置在重启 TrueNAS 后依然会生效,因为:
/etc/systemd/system/docker.service.d/override.conf
是 systemd 的官方 override 配置方式- 不会被 TrueNAS 的 middlewared 自动清除
- 不依赖
/etc/docker/daemon.json
可选:清理旧数据
如果你已经运行过 Docker,旧数据还在默认路径 /var/lib/docker
,你可以:
sudo systemctl stop docker
sudo mv /var/lib/docker /var/lib/docker.bak
sudo mkdir -p /data/docker/docker-root
sudo systemctl start docker
确保你的 /data
目录挂载是持久的
我的/data目录是本身就由boot-pool在zfs里面设置好的数据集,可通过下面的方法确定:
root@truenas:~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
OCEANPOOL 4.45T 9.95T 166K /mnt/OCEANPOOL
OCEANPOOL/.ix-virt 1.80M 9.95T 153K legacy
OCEANPOOL/.ix-virt/buckets 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/containers 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/custom 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/deleted 920K 9.95T 153K legacy
OCEANPOOL/.ix-virt/deleted/buckets 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/deleted/containers 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/deleted/custom 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/deleted/images 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/deleted/virtual-machines 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/images 153K 9.95T 153K legacy
OCEANPOOL/.ix-virt/virtual-machines 153K 9.95T 153K legacy
OCEANPOOL/Alpha 4.45T 9.95T 4.45T /mnt/OCEANPOOL/Alpha
boot-pool 4.85G 445G 96K none
boot-pool/.system 288M 445G 112K legacy
boot-pool/.system/configs-ae32c386e13840b2bf9c0083275e7941 3.10M 445G 3.10M legacy
boot-pool/.system/cores 120K 1024M 120K legacy
boot-pool/.system/netdata-ae32c386e13840b2bf9c0083275e7941 285M 445G 285M legacy
boot-pool/.system/nfs 112K 445G 112K legacy
boot-pool/.system/samba4 296K 445G 296K legacy
boot-pool/ROOT 4.53G 445G 96K none
boot-pool/ROOT/25.04.1 4.53G 445G 174M legacy
boot-pool/ROOT/25.04.1/audit 39.6M 445G 39.6M /audit
boot-pool/ROOT/25.04.1/conf 7.06M 445G 7.06M /conf
boot-pool/ROOT/25.04.1/data 1.69G 445G 1.69G /data # <------默认已挂载
boot-pool/ROOT/25.04.1/etc 7.23M 445G 6.18M /etc
boot-pool/ROOT/25.04.1/home 120K 445G 120K /home
boot-pool/ROOT/25.04.1/mnt 180K 445G 180K /mnt
boot-pool/ROOT/25.04.1/opt 96K 445G 96K /opt
boot-pool/ROOT/25.04.1/root 440K 445G 440K /root
boot-pool/ROOT/25.04.1/usr 2.53G 445G 2.53G /usr
boot-pool/ROOT/25.04.1/var 95.2M 445G 5.10M /var
boot-pool/ROOT/25.04.1/var/ca-certificates 96K 445G 96K /var/local/ca-certificates
boot-pool/ROOT/25.04.1/var/lib 27.9M 445G 27.2M /var/lib
boot-pool/ROOT/25.04.1/var/lib/incus 480K 445G 480K /var/lib/incus
boot-pool/ROOT/25.04.1/var/log 61.3M 445G 8.46M /var/log
boot-pool/ROOT/25.04.1/var/log/journal 52.9M 445G 52.9M /var/log/journal
boot-pool/grub 8.41M 445G 8.41M legacy
转载请注明来源