【记录】Truenas Scale 2022|拉取镜像时Docker启动失败、本地Docker无法访问如何转发端口、不使用k3s通过docker自行管理应用并安装Calibre-Web的方式
解决TrueNAS Scale中Docker服务无法启动及镜像拉取问题 摘要:文章记录了在TrueNAS Scale系统中遇到的Docker服务无法启动和镜像拉取问题。通过分析日志发现是存储驱动不兼容导致,解决方案是修改/etc/docker/daemon.json文件,将存储驱动改为"zfs"。针对镜像拉取超时问题,建议使用命令行拉取并配置国内镜像源。最后以部署Calibre
文章目录
我看了这篇花里胡哨的比较眼馋: 家用NAS(TrueNAS scale)使用经验分享——概述 - 知乎
但是我的Truenas Scale版本太老bug太多,怎么拉取应用都拉取不下来,痛定思痛,我琢磨了下怎么直接通过Docker直接拉取并管理应用。
Docker未启动
报错
错误: Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 411, in run
await self.future
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 446, in __run_body
rv = await self.method(*([self] + args))
File "/usr/lib/python3/dist-packages/middlewared/schema.py", line 1272, in nf
return await func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/middlewared/schema.py", line 1140, in nf
res = await f(*args, **kwargs)
File "/usr/lib/python3/dist-packages/middlewared/plugins/docker_linux/images.py", line 117, in pull
await self.docker_checks()
File "/usr/lib/python3/dist-packages/middlewared/plugins/docker_linux/images.py", line 176, in docker_checks
raise CallError('Docker service is not running')
middlewared.service_exception.CallError: [EFAULT] Docker service is not running
检查
sudo systemctl start docker
打印错误日志:
sudo journalctl -u docker --no-pager -n 50
日志内容:
Jul 16 11:44:23 truenas dockerd[4054452]: time="2025-07-16T19:44:23.265187375+08:00" level=info msg="stopping healthcheck following graceful shutdown" module=libcontainerd
Jul 16 11:44:24 truenas dockerd[4054452]: failed to start daemon: error initializing graphdriver: driver not supported
Jul 16 11:44:24 truenas systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Jul 16 11:44:24 truenas systemd[1]: docker.service: Failed with result 'exit-code'.
Jul 16 11:44:24 truenas systemd[1]: Failed to start Docker Application Container Engine.
Jul 16 11:44:24 truenas systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
Jul 16 11:44:24 truenas systemd[1]: Stopped Docker Application Container Engine.
Jul 16 11:44:24 truenas systemd[1]: docker.service: Start request repeated too quickly.
Jul 16 11:44:24 truenas systemd[1]: docker.service: Failed with result 'exit-code'.
Jul 16 11:44:24 truenas systemd[1]: Failed to start Docker Application Container Engine.
从日志来看,你的 Docker 服务 (dockerd) 启动失败了,主要原因是存储驱动 (storage driver) 的问题。具体错误如下:
Jul 16 11:44:23 truenas dockerd[4054452]: time="2025-07-16T19:44:23.264295321+08:00" level=error msg="failed to mount overlay: invalid argument" storage-driver=overlay2
Jul 16 11:44:23 truenas dockerd[4054452]: time="2025-07-16T19:44:23.264324804+08:00" level=error msg="[graphdriver] prior storage driver overlay2 failed: driver not supported"
Jul 16 11:44:24 truenas dockerd[4054452]: failed to start daemon: error initializing graphdriver: driver not supported
可能的原因和解决方案:
-
不支持的存储驱动 (
overlay2):- Docker 尝试使用
overlay2存储驱动,但你的系统内核可能不支持它,或者文件系统不支持。 - 解决方案:
- 检查你的文件系统类型。
overlay2需要支持的文件系统(如ext4、xfs等)。 - 如果是 ZFS(TrueNAS 默认使用 ZFS),Docker 可能需要使用
zfs存储驱动。
- 检查你的文件系统类型。
- Docker 尝试使用
-
修改 Docker 配置:
- 编辑 Docker 的配置文件 ,通过指令
nano /etc/docker/daemon.json(如果不存在这个文件,可以创建),添加一个字段storage-driver:{ "storage-driver": "zfs" } - 然后重启 Docker:
sudo systemctl daemon-reload sudo systemctl restart docker笔者注:亲测加上一个zfs配置,然后restart就好了。如果你的还不好可以问问大模型你的文件系统是什么。
- 编辑 Docker 的配置文件 ,通过指令
总结:
你的 Docker 服务无法启动是因为存储驱动 overlay2 不被支持。根据你的文件系统类型(很可能是 ZFS),修改 Docker 配置使用 zfs 或 vfs 驱动应该可以解决问题。
Docker拉取镜像超时
解决办法:不要从Truenas Scale那里拉取镜像,在命令行里拉取,一般的教程都会给一个可以访问的镜像站。(如果还是不行就通过VSCode的Remote-SSH远程连接服务器,再在主机上开代理克隆,VSCode会帮忙做代理的转发,如果还是不行就下载之后拖进去,如果拖进去都不行的话你可以查查怎么在linux上代理……)
如果不行可以考虑加一些镜像站(不知道管不管用,但我加上之后挺快):
nano /etc/docker/daemon.json
增加一个字段:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
}
然后重新加载配置并重新运行docker:
systemctl daemon-reload
systemctl restart docker
拉取后端口无法使用,以配置calibre为例
docker成功pull下来还启动之后,端口映射也映射了,居然用不了!
我参考的教程是这个:linux部署calibre-web服务 - 沉默的羊
这很奇怪,我刚好又查到一篇:解锁TrueNAS SCALE 三方docker容器网络访问限制,默认是关闭的;并添加Portainer-CE容器webGUI管理器_truenas not found docker-CSDN博客
总之如下。
1. 拉取Calibre-Web
终端运行
git clone https://github.com/linuxserver/docker-calibre-web
cd docker-calibre-web
nano docker-compose.yml
粘贴以下内容到编辑器(不要用最新版因为最新版已经不支持了Truenas Scale 2022了,另外注意改一下底下额外标注的两个参数):
version: "2.1"
services:
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
container_name: calibre-web
environment:
- PUID=0 # 这个参数要改成你自己的!可以用`id 你的用户名`查到;硬是用root也可以。
- PGID=0 # 这个参数要改成你自己的组名!可以用`id 你的用户名`查到。硬是用root的组可能会影响上传文件。
- TZ=Asia/Shanghai
- DOCKER_MODS=linuxserver/mods:universal-calibre #optional
- OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional
volumes:
- ./config:/config
- ./books:/books # optional!可以改,不改的话也记住自己的书都存到了这里
- ./imports:/imports
ports:
- 8083:8083
restart: unless-stopped
保存后继续在终端运行:
sudo docker-compose up -d
等待一段时间即可部署完成。
通过docker ps -a可查看部署情况,你应该看到类似下文:
lscr.io/linuxserver/calibre-web:latest "/init" 20 minutes ago Up 11 minutes 0.0.0.0:8083->8083/tcp, :::8083->8083/tcp calibre-web
但你会发现你还是访问不了8083端口。
重点来了!
2. 开启Docker端口转发
Truenas Scale默认没有防火墙,但是Docker没有开启端口转发。
其实只要改配置删掉不开启端口转发的配置就行了!
步骤如下:
nano /etc/docker/daemon.json
删掉我框柱的这两个属性:
重启docker配置和docker:
systemctl daemon-reload
systemctl restart docker
就可以了!
docker拉起后,等calibre-web初始化结束,就可以通过访问 http://公网ip:8083 ,初始账号是admin,初始密码是admin123。如果访问不了的朋友,再检查一下自己的8083端口有没有打开。
3. 更多配置
在这里下载空的matadata.db:How can generate a metadata.db file in command line mode(not docker)? · Issue #1695 · janeczku/calibre-web:https://github.com/OzzieIsaacs/calibre-web-test/blob/main/test/Calibre_db/metadata.db
上传到项目的./books文件夹中:
在终端设置这个文件的权限为666或者777:
chmod 666 ./books/metadata.db
在选择DataSet那页点到上级,选这个文件。


然后保存就行。刚一打开是这样:

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/149394416。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
更多推荐
所有评论(0)