Tasks.md 3.3.0 Docker Compose 部署指南
用 Docker Compose 部署 Tasks.md 3.3.0 官方镜像:编排文件、数据持久化、环境变量、主题切换、等价 docker run 与运维命令,全部实测验证。
Tasks.md 3.3.0 Docker Compose 部署指南
目标:用 Docker Compose 一键部署官方镜像
baldissaramatheus/tasks.md:3.3.0,完成数据持久化、环境变量配置与运维验证。本文所有命令与回显均已在实测环境(Docker Engine + Compose v2,端口 8134)验证通过。
一、环境信息
- 宿主机:Linux x86_64,已安装 Docker Engine 与 Docker Compose v2(
docker compose version可用) - 镜像:
baldissaramatheus/tasks.md:3.3.0(Docker Hub 官方镜像,2026-03-08 构建,拉取后体积约 632 MB) - 编排项目名:
tasks-md-330-stack(composename:字段不允许小数点,故版本号去点) - 端口映射:宿主
8134→ 容器8080(读者可换成任意空闲端口) - 数据目录(bind mount):
./data/tasks→/tasks,./data/config→/config
⚠️ 网络说明:实测时 Docker Hub 官方源拉取缓慢,已通过 registry 镜像加速器完成拉取;读者若拉取超时,可配置镜像加速或代理后重试。
二、镜像选型说明
Docker Hub 上 baldissaramatheus/tasks.md 的标签策略(2026-10-25 查询):
| 标签 | 指向 | 说明 |
|---|---|---|
3.3.0 | 固定版本 | 本文采用,可复现、可回滚 |
3.3 / 3 | 滚动跟随最新 3.3.x / 3.x | 自动跟进补丁版 |
latest | 滚动跟随最新稳定版 | 不建议生产使用,升级不可预期 |
选择建议:生产环境锁定完整版本号(
3.3.0);测试环境可用3自动跟进补丁。
三、前置条件
docker --version
docker compose version
确认 Docker 守护进程运行中:docker info 无报错即可。本文以 root 直接执行演示;普通用户需在 docker 用户组中。
四、部署步骤
4.1 准备项目目录与编排文件
mkdir -p /opt/tasks-md/data/tasks /opt/tasks-md/data/config
cd /opt/tasks-md
创建 docker-compose.yml:
name: tasks-md-330-stack
services:
tasks-md:
image: baldissaramatheus/tasks.md:3.3.0
container_name: tasks-md-3.3.0-app
environment:
- PUID=1000
- PGID=1000
- TITLE=Tasks.md 演示看板
- BASE_PATH=
- LOCAL_IMAGES_CLEANUP_INTERVAL=1440
volumes:
- /opt/tasks-md/data/tasks:/tasks
- /opt/tasks-md/data/config:/config
ports:
- "8134:8080"
restart: unless-stopped
⚠️ 注意:compose 顶层
name:(项目名)只允许小写字母、数字、连字符与下划线,不能含小数点,因此写作tasks-md-330-stack而非tasks-md-3.3.0-stack。
4.2 启动栈
cd /opt/tasks-md
docker compose up -d
实测回显:
Container tasks-md-3.3.0-app Running
首次启动时镜像会在容器内执行前端构建(vite build),日志可见:
> tasks.md@0.0.0 build
> vite build --base=/
vite v5.4.19 building for production...
...
API starting at 8080
4.3 验证部署
docker compose ps
curl -s http://localhost:8134/_api/title
curl -s -o /dev/null -w "GET / -> %{http_code}\n" http://localhost:8134/
实测回显:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
tasks-md-3.3.0-app baldissaramatheus/tasks.md:3.3.0 "/bin/sh -c 'sh entr…" tasks-md About a minute ago Up About a minute 0.0.0.0:8134->8080/tcp, [::]:8134->8080/tcp
Tasks.md 演示看板
GET / -> 200
浏览器访问 http://<服务器IP>:8134 即可打开看板。
五、数据持久化说明
Tasks.md 的全部数据都在两个卷里:
| 容器路径 | 内容 | 本文宿主路径 |
|---|---|---|
/tasks | 泳道目录 + 卡片 Markdown 文件 | ./data/tasks |
/config | 主题样式、标签颜色(tags.json)、排序(sort.json)、上传图片(images/) | ./data/config |
实测:通过 API 创建泳道「待办」与卡片「部署验证.md」后,宿主目录即时可见:
/opt/tasks-md/data/:
config
tasks
/opt/tasks-md/data/config:
images
sort
stylesheets
/opt/tasks-md/data/tasks:
待办
/opt/tasks-md/data/tasks/待办:
部署验证.md
重启验证数据不丢:
docker compose restart
curl -s http://localhost:8134/_api/resource/
实测回显:
[{"name":"待办","files":[{"name":"部署验证","content":"## Compose 部署验证\n\n- [x] 数据持久化\n","lastUpdated":"2026-10-25T01:36:44.506Z","createdAt":"2026-10-25T01:36:44.506Z"}]}]
卡片内容与文件时间戳均在重启后保持不变。
💡 说明:
PUID/PGID决定容器内新建文件的属主。设为1000:1000时,宿主机上./data下新文件归属于 UID/GID 1000 的用户,便于宿主机直接用编辑器改任务文件;不设则为 root 所有。
六、环境变量表
| 变量 | 默认值 | 必填 | 说明 |
|---|---|---|---|
PUID | 无 | 建议 | 新建文件属主 UID |
PGID | 无 | 必填配对 | 新建文件属主 GID |
TITLE | 空 | 否 | 页面与浏览器标签页标题 |
BASE_PATH | 空 | 否 | 子路径反代基础路径(如 /tasks);置非 / 时 PWA 不可用 |
LOCAL_IMAGES_CLEANUP_INTERVAL | 1440 | 否 | 未引用图片清理周期(分钟),0 关闭 |
参数语义与逐项说明见本专栏《Tasks.md 3.3.0 配置参数详解》篇。
七、配置参数说明
容器启动时 entrypoint 会完成三件事:
- 若
CONFIG_DIR/stylesheets/custom.css不存在,写入默认内容(导入 adwaita 主题); - 按
BASE_PATH重新构建前端并把产物复制为后端静态目录; - 若设置了
PUID/PGID,对/tasks与/config递归chown。
因此:修改 BASE_PATH、TITLE 等变量后 docker compose up -d 重建容器即可;样式文件 custom.css 改宿主 ./data/config/stylesheets/custom.css 即时生效,无需重启。
切换主题示例(改宿主文件):
echo "@import url(./color-themes/nord.css);" > /opt/tasks-md/data/config/stylesheets/custom.css
curl -s http://localhost:8134/stylesheets/custom.css
实测回显:
@import url(./color-themes/nord.css);
八、配置文件挂载
除环境变量外,常用挂载点:
| 宿主文件/目录 | 容器路径 | 用途 |
|---|---|---|
./data/config/stylesheets/custom.css | /config/stylesheets/custom.css | 自定义样式入口 |
./data/config/stylesheets/color-themes/ | /config/stylesheets/color-themes/ | 内置三套主题(adwaita/nord/catppuccin),可增删 |
./data/config/tags.json | /config/tags.json | 标签颜色映射(应用自动维护) |
./data/config/sort.json | /config/sort.json | 卡片排序(应用自动维护) |
九、等价 docker run
不使用 Compose 时,与本文编排等价的单命令:
docker run -d \
--name tasks-md-3.3.0-app \
-e PUID=1000 \
-e PGID=1000 \
-e TITLE="Tasks.md 演示看板" \
-e BASE_PATH= \
-e LOCAL_IMAGES_CLEANUP_INTERVAL=1440 \
-p 8134:8080 \
-v /opt/tasks-md/data/tasks:/tasks \
-v /opt/tasks-md/data/config:/config \
--restart unless-stopped \
baldissaramatheus/tasks.md:3.3.0
十、常用运维命令
docker compose ps # 查看栈内服务状态
docker compose logs -f # 跟踪日志
docker compose restart # 重启服务
docker compose down # 停止并删除栈(数据卷保留)
docker compose up -d # 重新启动栈
docker compose pull # 拉取编排中声明的镜像新版本
升级版本流程:改 docker-compose.yml 中 image: 为新版本号 → docker compose pull → docker compose up -d → curl -s http://localhost:8134/_api/title 验证。
⚠️ 注意:从 2.x 升级到 3.x 需先按官方 migration-guide 处理(环境变量与目录结构有变化),跨大版本升级前务必备份
./data。
十一、常见问题
Q1:docker compose up -d 报项目名非法?
name: 含小数点等大写/特殊字符所致。compose 项目名只允许 [a-z0-9_-],用 tasks-md-330-stack 这类写法。
Q2:启动后浏览器访问空白?
首次启动容器内要跑前端构建(日志有 vite build),大内存机器数秒即可完成;若日志停在构建阶段较久属正常,等到出现 API starting at 8080 再访问。
Q3:页面标题没有变成 TITLE 的值?
TITLE 在进程启动时读取。改完执行 docker compose up -d(重建容器)而非仅 restart,并强制刷新浏览器缓存。
Q4:上传的图片过几天不见了?
LOCAL_IMAGES_CLEANUP_INTERVAL 默认 1440 分钟清理未被引用的图片。确认卡片正文中图片引用形如 ;或将该变量置 0 关闭清理。
Q5:中文泳道/卡片通过 API 操作异常? API 路径中的中文必须 percent-encode,详见本专栏《Tasks.md 3.3.0 API 使用详解》篇排障实录。
Q6:反代到子路径后静态资源 404?
BASE_PATH 必须与反代路径一致(如都设为 /tasks),改 BASE_PATH 后需 docker compose up -d 让 entrypoint 重新构建前端产物。
十二、参考链接
- Tasks.md Docker Hub:https://hub.docker.com/r/baldissaramatheus/tasks.md
- Tasks.md GitHub 仓库:https://github.com/BaldissaraMatheus/Tasks.md
- 2.x → 3.x 迁移指南:https://github.com/BaldissaraMatheus/Tasks.md/blob/main/migration-guide.md
- Docker Compose 官方文档:https://docs.docker.com/compose/