官方 docker 镜像发布在 docker hub 上,适用于 AMD64、ARMv7 和 ARM64/v8:https://hub.docker.com/r/triliumnext/trilium/
一、先决条件
确保您的系统上安装了 Docker。
如果您需要安装 Docker 的帮助,请参阅 Docker 安装文档
注意:Trilium 的 Docker 容器需要 root 权限才能正常运行。
二、使用 Docker Compose 运行
2.1 获取最新docker-compose.yml
wget https://raw.githubusercontent.com/TriliumNext/Trilium/master/docker-compose.yml
(可选)在启动文件之前编辑文件以配置容器设置。除非另有配置,否则数据目录将通过端口 8080 访问容器。docker-compose.yml~/trilium-data
2.2 启动容器
运行以下命令在后台启动容器:
docker compose up -d
三、在没有 Docker Compose / 进一步配置的情况下运行
3.1 拉取 Docker 镜像
要拉取映像,请使用以下命令,替换为所需的版本或标记,例如 或 仅 。(请参阅 https://hub.docker.com/r/triliumnext/trilium/tags 中已发布的标签名称):[VERSION]v0.91.6latest
docker pull triliumnext/trilium:v0.91.6
3.2 准备数据目录
Trilium 需要主机系统上的目录来存储其数据。此目录必须挂载到具有写入权限的 Docker 容器中。
3.3 运行 Docker 容器
3.3.1 仅限本地访问
运行容器以使其只能从 localhost
访问。此设置适用于测试或使用 Nginx 或 Apache 等代理服务器时。
sudo docker run -t -i -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/trilium:[VERSION]
使用 验证容器是否正在运行。
docker ps
通过网络浏览器访问 Trilium,网址为 。
127.0.0.1:8080
3.3.2 本地网络接入
要使容器只能在本地网络上访问,请先创建一个新的 Docker 网络:
docker network create -d macvlan -o parent=eth0 --subnet 192.168.2.0/24 --gateway 192.168.2.254 --ip-range 192.168.2.252/27 mynet
然后,使用网络设置运行容器:
docker run --net=mynet -d -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/trilium:-latest
要为保存的数据设置不同的用户 ID (UID) 和组 ID (GID),请使用 和 环境变量:USER_UIDUSER_GID
docker run --net=mynet -d -p 127.0.0.1:8080:8080 -e "USER_UID=1001" -e "USER_GID=1001" -v ~/trilium-data:/home/node/trilium-data triliumnext/trilium:-latest
使用本地网络上的设备查找本地 IP 地址并访问该服务。docker inspect [container_name]
docker ps
docker inspect [container_name]
全球访问
要允许从任何 IP 地址访问,请按如下方式运行容器:
docker run -d -p 0.0.0.0:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/trilium:[VERSION]
使用 停止容器,其中容器 ID 是从 。docker stop <CONTAINER ID>docker ps
3.4 自定义数据目录
对于自定义数据目录,请使用:
-v ~/YourOwnDirectory:/home/node/trilium-data triliumnext/trilium:[VERSION]
如果您想以非默认方式运行实例,请按如下方式使用音量开关: 。了解 Docker 如何处理卷非常重要,第一个路径是您自己的路径,第二个路径是虚拟绑定到的路径。https://docs.docker.com/storage/volumes/冒号前的路径是主机目录,冒号后的路径是容器的路径。更多详细信息可以在 Docker 卷文档中找到。
-v ~/YourOwnDirectory:/home/node/trilium-data triliumnext/trilium:<VERSION>
四、反向代理
nginx 代理
4.1 关于 --user 指令的注释
该指令不受支持。相反,请使用 和 环境变量来设置适当的用户和组 ID。--userUSER_UIDUSER_GID
4.2 时区注意事项
如果您遇到时区问题并且您没有使用 docker-compose,您可能需要添加一个带有本地时区 TZ 标识符的环境变量。TZ
五、无根 Docker 镜像
如果您更愿意运行 Trilium 而不必将 Docker 容器运行为 ,则可以使用提供的 Debian(默认)和基于 Alpine 的映像中的任何一个带有标签。rootrootless
如果您不确定,请坚持使用上面引用的“rootful”Docker 镜像。
以下是一些拉取无根镜像的命令:
# For Debian-based image
docker pull triliumnext/trilium:rootless
# For Alpine-based image
docker pull triliumnext/trilium:rootless-alpine
5.1 为什么是无根?
以非 root 身份运行容器是一种安全最佳实践,可减少容器突破的潜在影响。如果攻击者设法逃脱容器,他们将只拥有非 root 用户的权限,而不是对主机的完全 root 访问权限。
5.2 这个怎么运作
无根的延龄草图像:
在构建时创建非 root 用户 ()
trilium
将应用程序配置为以此非 root 用户身份运行
允许通过 Docker 的标志对用户的 UID/GID 进行运行时自定义
--user
不需要单独的 Docker 脚本
entrypoint
5.3 用法
5.3.1 使用 docker-compose(推荐)
# Run with default UID/GID (1000:1000)
docker-compose -f docker-compose.rootless.yml up -d
# Run with custom UID/GID (e.g., match your host user)
TRILIUM_UID=$(id -u) TRILIUM_GID=$(id -g) docker-compose -f docker-compose.rootless.yml up -d
# Specify a custom data directory
TRILIUM_DATA_DIR=/path/to/your/data TRILIUM_UID=$(id -u) TRILIUM_GID=$(id -g) docker-compose -f docker-compose.rootless.yml up -d
5.3.2 使用 Docker CLI
# Build the image
docker build -t triliumnext/trilium:rootless -f apps/server/Dockerfile.rootless .
# Run with default UID/GID (1000:1000)
docker run -d --name trilium -p 8080:8080 -v ~/trilium-data:/home/trilium/trilium-data triliumnext/trilium:rootless
# Run with custom UID/GID
docker run -d --name trilium -p 8080:8080 --user $(id -u):$(id -g) -v ~/trilium-data:/home/trilium/trilium-data triliumnext/trilium:rootless
5.4 环境变量
TRILIUM_UID
:用于容器进程的 UID(传递给 Docker 的标志)--user
TRILIUM_GID
:用于容器进程的 GID(传递给 Docker 的标志)--user
TRILIUM_DATA_DIR
:容器内数据目录的路径(默认:/home/node/trilium-data
)
有关配置环境变量(网络设置、身份验证、同步等)的完整列表,请参阅
5.5 卷权限
如果遇到数据卷的权限问题,请确保:
主机目录对您正在使用的 UID/GID 具有适当的权限
您将 和 设置为匹配主机目录的所有者
TRILIUM_UIDTRILIUM_GID
# For example, if your data directory is owned by UID 1001 and GID 1001:
TRILIUM_UID=1001 TRILIUM_GID=1001 docker-compose -f docker-compose.rootless.yml up -d
5.6 考虑
容器以特定的 UID/GID 开头,可以在运行时自定义
与传统设置不同,此方法不使用带有 / 命令的单独入口点脚本
usermodgroupmod
容器不能在运行时修改自己的 UID/GID,这是无根容器的安全特性
5.7 可用的无根映像
提供了两个无根变体:
基于 Debian(默认):使用 Debian Bullseye Slim 基础镜像
Dockerfile:
apps/server/Dockerfile.rootless
推荐给大多数用户
基于 Alpine:使用 Alpine 基础图像以获得较小的尺寸
Dockerfile:
apps/server/Dockerfile.alpine.rootless
图像尺寸较小,但可能与某些系统存在兼容性问题
5.8 构建自定义无根镜像
如果您愿意,您还可以在构建时自定义 UID/GID:
# For Debian-based image with custom UID/GID
docker build --build-arg USER=myuser --build-arg UID=1001 --build-arg GID=1001 \
-t triliumnext/trilium:rootless-custom -f apps/server/Dockerfile.rootless .
# For Alpine-based image with custom UID/GID
docker build --build-arg USER=myuser --build-arg UID=1001 --build-arg GID=1001 \
-t triliumnext/trilium:alpine-rootless-custom -f apps/server/Dockerfile.alpine.rootless .
可用的构建参数:
USER
:非 root 用户的用户名(默认值:trilium)UID
:非 root 用户的用户 ID(默认值:1000)GID
:非 root 用户的组 ID(默认值:1000)