Docker 安装

2025-09-25
-
-

官方 docker 镜像发布在 docker hub 上,适用于 AMD64ARMv7ARM64/v8https://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]
  1. 使用 验证容器是否正在运行。docker ps

  2. 通过网络浏览器访问 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 这个怎么运作

无根的延龄草图像:

  1. 在构建时创建非 root 用户 ()trilium

  2. 将应用程序配置为以此非 root 用户身份运行

  3. 允许通过 Docker 的标志对用户的 UID/GID 进行运行时自定义--user

  4. 不需要单独的 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 卷权限

如果遇到数据卷的权限问题,请确保:

  1. 主机目录对您正在使用的 UID/GID 具有适当的权限

  2. 您将 和 设置为匹配主机目录的所有者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 可用的无根映像

提供了两个无根变体:

  1. 基于 Debian(默认):使用 Debian Bullseye Slim 基础镜像

    • Dockerfile:apps/server/Dockerfile.rootless

    • 推荐给大多数用户

  2. 基于 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)

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录关闭